2012-04-05 15 views
6

के रूप में प्राप्त करें यह एक बहुत ही सरल सवाल है कि मुझे भी एक अच्छा जवाब नहीं मिल रहा है।jQuery एचटीएमएल को ट्रैवर्सबल jQuery ऑब्जेक्ट

$.get('/myurl.html', function(response){ 
    console.log(response); //works! 
    console.log($(response).find('#element').text()); //null :(
}, 'html'); 

मैं बस अपने एचटीएमएल प्रतिक्रिया को पार करने की कोशिश कर रहा हूं। अभी तक केवल एक चीज जो मैं सोच सकता हूं कि काम करेगा, शरीर टैग के अंदर regex है, और मेरे ट्रैवर्स करने योग्य jQuery ऑब्जेक्ट बनाने के लिए एक स्ट्रिंग के रूप में उपयोग करें। लेकिन वह बेवकूफ लगता है। कोई भी ऐसा करने का सही तरीका बताता है?

शायद यह मेरा एचटीएमएल है?

<html> 
    <head> 
     <title>Center</title> 
    </head> 
    <body> 
     <!-- tons-o-stuff --> 
    </body> 
</html> 

यह भी ठीक काम करता है, लेकिन मेरी आवश्यकताओं के अनुरूप नहीं होगा:।

$ ('# myelem') लोड ('/ myurl.html #element');

+1

यदि आप मान "तत्व" के साथ 'id' विशेषता के साथ प्रतिक्रिया HTML में कुछ तत्व ढूंढ रहे हैं, तो यह मेरे लिए सही लग रहा है। मुझे यकीन नहीं है कि यह क्यों काम नहीं करेगा। – jessegavin

+1

आपके द्वारा लाए जा रहे एचटीएमएल कैसा दिखता है? –

+0

यह आपके प्रश्न का उत्तर देना चाहिए: http://stackoverflow.com/questions/9540218/a-javascript-parser-for-dom/9540313#9540313 –

उत्तर

7

यह विफल रहता है क्योंकि इसे <html> और <body> पसंद नहीं है।

विधि यहाँ वर्णित का उपयोग करना: A JavaScript parser for DOM

$.get('/myurl.html', function(response){ 
    var doc = document.createElement('html'); 
    doc.innerHTML = response; 

    console.log($("#element", doc).text()); 
}, 'html'); 

मुझे लगता है कि इसके बाद के संस्करण काम करना चाहिए।

+0

यह काम करता है। पर क्यों? – Fresheyeball

+0

मुझे इसके बारे में आंतरिक विवरण देखने की आवश्यकता होगी कि jquery इसका उत्तर देने के लिए कैसे काम करता है। मूल रूप से jquery के पास एक तरीका है जब यह एक HTML स्ट्रिंग तर्क दिया जाता है जब यह डोम ऑब्जेक्ट्स बनाता है।यह एचटीएमएल स्ट्रिंग्स के साथ संगत नहीं था जिसमें 'बॉडी' और 'एचटीएमएल' टैग होते हैं, लेकिन सौभाग्य से यह एकमात्र तरीका नहीं है और उपरोक्त तरीका इसे करने का एक अलग तरीका है। –

+0

वास्तव में दिलचस्प है। – Fresheyeball

0

इस प्रयास करें:

$("#element", $(response)).text() 

यह $ (प्रतिक्रिया) में तत्व आईडी की खोज करने वाले डोम वस्तु के रूप में $ (प्रतिक्रिया) का इलाज।

+0

respond.responseText अपरिभाषित – Fresheyeball

1

jQuery एचटीएमएल यह सामान्य रूप से एचटीएमएल और बॉडी टैग नहीं हटेगा पार्स करता है, इसलिए यदि तत्व आप खोज रहे हैं अपने दस्तावेज़ संरचना के शीर्ष स्तर पर है एक बार एचटीएमएल और शरीर टैग तो हटा दिया गया है जब find समारोह हो सकता है जिस तत्व को आप खोज रहे हैं उसे ढूंढने में सक्षम न हों।

अधिक जानकारी के लिए इस सवाल का देखें - Using jQuery to search a string of HTML

+0

यह शीर्ष स्तर की वस्तु नहीं थी। – Fresheyeball

-1

शायद मैं कुछ गलत समझ रही है, लेकिन

.find('#element') 

मैचों में से एक आईडी के साथ तत्व "तत्व," की तरह

<p id="element"> 

के बाद से मुझे "सामानों की बहुत सारी चीज़ें" दिखाई नहीं दे रही है, मुझे नहीं पता कि आप कौन से तत्व ढूंढने की कोशिश कर रहे हैं।

+1

यह डेविड का जवाब नहीं है। टिप्पणी के रूप में इसे पोस्ट करना अधिक उचित होगा। –

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