2011-11-22 7 views
8

मैंने हमेशा सोचा था कि jQuery केवल DOM तत्व पर संचालित होता है, वह वो नोड्स हैं जिनके पास nodeType == 1 है।jQuery टिप्पणी तत्वों का इलाज कैसे करता है?

हालांकि मैं हैरान है कि HTML बनाने के दौरान $("<p> </p><!-- comment -->") परिणामों में कर रहा हूँ:

[p, Comment { data=" comment ", length=21, nodeName="#comment", more...}] (Firebug स्वरूपण)

मैं AJAX और एक डोम टिप्पणी से कुछ HTML स्वीकार किए जाते हैं इस तरह से बनाया गया है और एक समारोह के लिए कहीं न कहीं पारित किया गया था यह केवल तत्वों के लिए लागू होता है: defaultView.getComputedStyle(elem, null)

क्या इसमें से कुछ साफ तरीका है?

उत्तर

5

मैं हमेशा सोचा था कि jQuery केवल डोम तत्वों

इसके चयनकर्ताओं पर चल रही है केवल डोम तत्वों का चयन करें। आपके मामले में, आप प्रदान की गई HTML स्ट्रिंग से नोड्स बना रहे हैं। तो jQuery स्ट्रिंग को पार करता है और आपको उन नोड्स को वापस देता है जिन्हें आप पूछ रहे हैं।

इसे साफ़ करने के लिए, .filter() करें।

var els = $("<p> </p><!-- comment -->").filter(function() { 
                return this.nodeType === 1; 
               }); 
+0

स्पष्टीकरण के कारण स्वीकृत। – tillda

+0

@ टिलडा: बस एफवाईआई, यह '' * "चयनकर्ता चलाने से प्रत्यक्ष 'this.nodeType === 1' परीक्षण के साथ एक तेज़ ऑपरेशन भी है, हालांकि एक छोटे से सेट के साथ, यह एक उल्लेखनीय अंतर नहीं देगा । – RightSaidFred

5

हम्म, एक दिलचस्प समस्या है। थोड़ी देर के लिए झुकाव के बाद मुझे पता चला कि आप (*) के साथ .filter का उपयोग करके उन्हें हटा सकते हैं।

var a = $("<p></p><!-- comment -->"); 
console.log(a); 
console.log(a.filter("*")); 
संबंधित मुद्दे