2011-07-26 13 views
6

मैं इस तरह HTML है:करें HTML तत्व सीएसएस संपत्ति के मूल्य से

var pos = { top: 252, left: 54 }; 

मैं के साथ तत्व का चयन करना चाहते हैं:

… 
<div style="top: 252px; left: 54px;"></div> 
<div style="top: 252px; left: 162px;"></div> 
<div style="top: 288px; left: 108px;"></div> 
… 

मैं एक जावास्क्रिप्ट इस तरह शाब्दिक आपत्ति है स्थिति है कि वस्तु शाब्दिक इंगित करता है। स्थिति अद्वितीय हैं, इसलिए केवल एक तत्व का चयन किया जाएगा।

उत्तर के लिए धन्यवाद।

+1

आप यहां एक कस्टम चयनकर्ता बना सकते हैं जो एक एसओ लिंक है जो http://stackoverflow.com/questions/1180067/jquery-find-by-inline-css-attribute/1180106#1180106 – Rafay

+0

" अपने आप को फ़िल्टर करने के लिए .filter' ('.fsster' के अंदर' .css' का उपयोग करें)। – pimvdb

+0

मैंने अपनी पोस्ट में सही समाधान + jsfiddle नमूना पोस्ट किया है। – zatatatata

उत्तर

5

क्रेडिट मूल पोस्टर पर यहां जाता है;

jQuery find by inline css attribute

समारोह 'styleEquals' है और के रूप में लागू किया जा सकता;

jQuery.extend(jQuery.expr[':'], { 
    styleEquals: function(a, i, m){ 
     var styles = $(a).attr("style").split(" ") 
     var found = false; 
     for (var i = 0; i < styles.length; i++) { 
       if (styles[i]===m[3]) { 
         found = true; 
         break; 
       } 
     } 
     return found; 
    } 
}); 

फिर आप अपने नए jquery एक्सटेंशन फ़ंक्शन का उपयोग करके अपने स्टाइल विशेषता मानों द्वारा तत्वों को खोज सकते हैं;

$("div:styleEquals('top=252px'):styleEquals('left:54px')"); 
+0

यह समाधान काम करता है इसलिए मैं इसे स्वीकृत उत्तर के रूप में चुनता हूं लेकिन मेरी समस्या में मैंने अंततः आईडी का उपयोग किया। – Darkry

5

मैं बस इतना कह सकता हूं कि ऐसा नहीं है!

यदि आप एक div में एक अद्वितीय स्थिति शैली जोड़ सकते हैं, तो आप एक ही समय में एक पहचानकर्ता को आसानी से जोड़ सकते हैं।

जावास्क्रिप्ट में तत्व का चयन करने के लिए इस पहचानकर्ता का उपयोग करें, सीएसएस स्थिति नहीं।

+2

ठीक है। बेशक मैं यह कर सकता हूं, मैं सिर्फ यह पूछना चाहता था कि सीएसएस मूल्यों के साथ ऐसा करने की कोई संभावना है या नहीं। – Darkry

+2

लेकिन आप क्यों चाहेंगे? सीएसएस तत्वों को स्टाइल करने के लिए है, उन्हें पहचान नहीं! यदि आप दोनों को मिलाते हैं, तो आप एक संभावित रखरखाव दुःस्वप्न बना रहे हैं! – BonyT

+0

मैं देख सकता था क्यों, अगर यह किसी तरह का खेल था? और सैकड़ों तत्व गतिशील रूप से बनाए गए थे। प्रत्येक स्थिति के लिए एक अलग सीएसएस वर्ग बनाने के लिए यह समझ में नहीं आता है। फिर आपको किसी भी तरह से अलग-अलग तत्वों का चयन करना होगा। मैंने बॉक्स के बाहर jQuery के साथ ऐसा करने का एक तरीका प्रस्तावित किया है। – knut

1

उपयोग

function findElement (top, left) { 
    return target = $('div').filter(function() { 
     var div = $(this); 
     if (parseInt(div.css('top')) == top && parseInt(div.css('left')) == left) 
      return true; 
     return false; 
    }); 
} 

jsfiddle sample

1

देखें जब आप इन DIV उत्पन्न करते हैं, उन्हें अद्वितीय आईडी विशेषता के साथ आवंटित। फिर आप आईडी विशेषता के साथ DIV ऑब्जेक्ट पुनर्प्राप्त कर सकते हैं।

1

उन्हें कक्षा या आईडी दें और कक्षा/आईडी का उपयोग करके उनका चयन करें, यह बहुत तेज़ होगा। अन्यथा आपको उन सभी को ढूंढना होगा और सीएसएस मूल्यों द्वारा फ़िल्टर करना होगा।

2

आप बॉक्स से बाहर the jQuery JavaScript library के साथ इस तरह यह कर सकते हैं:

var pos = { top: 252, left: 54 }; 
$('div[style*="top: ' + pos.top + 'px"][style*="left: ' + pos.left + 'px"]'); 

आप सफेद स्थान लगातार उपयोग करने के लिए सुनिश्चित करने के लिए की जरूरत है। यदि आप टाइप करते हैं:

<div style="top:252px; left:54px;"></div> 

प्रस्तावित चयनकर्ता काम नहीं करेगा।

आप मेरे उदाहरण कोड का उपयोग करके style विशेषता में अन्य सीएसएस गुण भी जोड़ सकते हैं, और ऑर्डर कोई फर्क नहीं पड़ता।

<div style="left: 54px; background: gray; top: 252px;"></div> 
1

आप शैली विशेषता की सामग्री से तत्व का चयन कर सकते हैं (रिक्त स्थानों पर ध्यान देना):

$('div[style*="top: 252px; left: 54px"]').css("color","red") 

Example यहाँ एक उदाहरण है।

लेकिन बोनीटी ने कहा - आपको मूल्यों को आईडी या कक्षा में रखना चाहिए।

संबंधित मुद्दे