2012-06-13 9 views
8

कहते हैं कि मैं कुछचयन तत्व यह है कि एक विशेषता के भीतर एक स्ट्रिंग शामिल नहीं है

<TR style = "background-color : red ;"> 

और कुछ

<TR> 

डालते हैं (उल्लेखनीय है कि रिक्त स्थान पेट के बगल में और करने के लिए क्योंकि पेज मैं के साथ काम कर रहा हूँ कि जिस तरह से में लिखा है)

अब अर्धविराम, जानबूझकर कर रहे हैं, इस:

$('.detailtable tr:not([style~="darkgray"])') 

पूरी तरह से काम करता है। लेकिन here यह कहते हैं: [! नाम = "मूल्य"]

प्रदर्शन देशी डोम querySelectorAll() विधि द्वारा प्रदान को बढ़ावा देने का लाभ नहीं ले सकते। । आधुनिक ब्राउज़रों में बेहतर प्रदर्शन के लिए $ नहीं ('[नाम = "मूल्य"]') के बजाय

तो मैं सोच रहा था का उपयोग करें ("अपने-शुद्ध सीएसएस-चयनकर्ता"): मेरी अभिव्यक्ति सबसे अच्छा है एक या कुछ ऐसा:

$('.detailtable tr').not('[style~="darkgray"]') // this doesn't work! 

बेहतर प्रदर्शन कर रहा है? और इस आखिरी अभिव्यक्ति को लिखने का सही तरीका क्या है?

अग्रिम

+0

'$ ('। Detailtable tr')। ('[Style ~ =" darkgray "]') '' को वही काम करना चाहिए। यदि आप प्रदर्शन के बारे में चिंतित हैं, तो इसका परीक्षण करें: http://jsperf.com/। –

+0

जैसा कि मैंने टिप्पणी में लिखा था, $ ('। Detailtable tr')। ('[Style ~ = "darkgray"]') काम नहीं करता है ... – Pierpaolo

उत्तर

20

तुम सच में "तत्व यह है कि एक विशेषता भीतर एक स्ट्रिंग शामिल नहीं है का चयन करें" चाहते हैं, आप ऐसा तरह *= बजाय ~=, का उपयोग करना चाहिए:

$('.detailtable tr').not('[style*="darkgray"]'); 

यहाँ fiddle है।


और नहीं, .not का उपयोग संभवतः तेज़ नहीं है।querySelectorAll उस चयनकर्ता को पार्स करने में सक्षम होना चाहिए।

यह fiddle देखें।


संपादित करें: आप IE8 पर ध्यान देते हैं कि ज्यादा है, तो :not चयनकर्ता के बजाय .not पद्धति का उपयोग करके आप एक छोटे प्रदर्शन को बढ़ावा देने होंगे। इसका कारण बहुत आसान है: IE8 विशेषता चयनकर्ताओं का समर्थन करता है, लेकिन अस्वीकरण चयनकर्ता नहीं।

+0

हां, यह 'querySelectorAll()' के साथ काम करेगा क्योंकि यह एक वैध सीएसएस चयनकर्ता है। यह भी देखें: [jQuery और सीएसएस के बीच नहीं() चयनकर्ता में क्या अंतर है?] (Http://stackoverflow.com/questions/10711730/whats-the-difference-in-the-not-selector-between- jquery-and-css) (मैं इस बारे में एक छोटा सा अनुभाग लिखने जा रहा था कि लोगों को प्रदर्शन के बारे में देखभाल करना बंद कर देना चाहिए, लेकिन मुझे लगता है कि वहां लोगों को शायद पहले से ही इसे पढ़ने के लिए प्रदर्शन के बारे में बहुत अधिक परवाह है, इसलिए मुझे परवाह नहीं है इसे लिखें ...) – BoltClock

+0

@ बोल्टक्लॉक - निश्चित रूप से देशी ': नहीं' चयनकर्ता और jQuery के गोमांस के बीच मतभेद हैं 'नहीं'। हालांकि, इस मामले में, यह मानना ​​सुरक्षित है कि मूल कार्यान्वयन इसे ठीक से संभाल लेगा। –

+0

@ बोल्टक्लॉक - मुझे प्रदर्शन के बारे में बहुत अधिक परवाह है, लेकिन मैं आपकी राय सुनकर खुशी से सुनूंगा। साझा करने के लिए परवाह? मैं इसे पढ़ता हूं भले ही यह छोटी-उपन्यास-पुस्तक की लंबाई थी ... –

0

I'd suggest you take a look at this.

दिलचस्प बात यह धन्यवाद, छद्म चयनकर्ताओं (जैसे ": नहीं") वास्तव में एक समारोह के प्रारंभिक चयनकर्ता के बगल का उपयोग कर की तुलना में धीमी हो जाते हैं। वास्तव में ... वे स्पष्ट रूप से "धीमे से दोगुना" हैं।

मैं बोली:

  1. $("#id p");
  2. $("#id").find("p");

यह आश्चर्य होगा आप को जानने के लिए कि दूसरा तरीका दोगुनी गति से पहले के रूप में की तुलना में अधिक हो सकता है? जानना जो चयनकर्ता दूसरों को बेहतर प्रदर्शन करते हैं (और क्यों) एक सुंदर कुंजी बिल्डिंग ब्लॉक सुनिश्चित करने में है कि आपका कोड अच्छी तरह से चलता है और आपके उपयोगकर्ताओं को चीजों के होने का इंतजार नहीं करता है।

मैं .not मेरे दोस्त के साथ जाऊंगा!

+0

स्पष्ट रूप से? मुझे नहीं। – BoltClock

+0

http://jsperf.com/id-vs-class-vs-tag-selectors/2 के अनुसार, छद्म चयनकर्ता सभी चयनकर्ताओं में सबसे धीमे हैं। मुझे कोई सबूत नहीं मिला है जो कहता है कि वे बाद में एक jQuery फ़ंक्शन को चेन करने से तेज़ हैं। फिर फिर, सिर्फ इसलिए कि मुझे नहीं मिला है सबूत का मतलब यह नहीं है कि यह अस्तित्व में नहीं है। :) – cereallarceny

0

W3C Recommendation से, जो आप वर्तमान में उपयोग करते हैं, उसे document.querySelectorAll() के साथ भी पूरी तरह ठीक काम करना चाहिए।

शायद आप परीक्षण कर सकते हैं यदि यह अपेक्षित काम करता है।

+0

': नहीं()' कई साल पहले मसौदे में जोड़ा गया था, और jQuery ने जल्द ही इसे उठाया ... – BoltClock

+0

@ बोल्टक्लॉक लेकिन [चयनकर्ता तालिका] (http://www.w3.org/TR/css3- चयनकर्ताओं /#selectors) नेगेशन छद्म वर्ग के लिए 'सीएसएस स्तर' कॉलम में पहले परिभाषित '3' का उल्लेख किया है। इसलिए मैंने सोचा कि यह चयनकर्ता सूची में हाल ही में जोड़ा गया था। कृपया पुष्टि करने के लिए कोई संदर्भ दें कि यह पहले jQuery द्वारा उठाया गया था। मैं संपादन से पहले आपको प्रतिक्रिया का इंतजार करूंगा। – Sujay

+0

CSS3 केवल हाल ही में एक सिफारिश की गई थी, लेकिन यह 10 से अधिक वर्षों के लिए मसौदे में थी और ': नहीं()' बहुत लंबे समय तक रहा है (spec पृष्ठ पर जाएं और "पिछला संस्करण" पर क्लिक करना जारी रखें)। jQuery ने अपनी पहली प्रमुख स्थिर रिलीज में 'नहीं() 'के साथ भेज दिया - यह कहता है" संस्करण जोड़ा गया: 1.0 "[डॉक्स] में (http://api.jquery.com/not-selector)। – BoltClock

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