2013-02-27 205 views
9

मैं अन्य पृष्ठों से एचटीएमएल लोड को निकालने के लिए और उस पृष्ठ का डेटा दर्शाती बिना:jQuery पार्स एचटीएमएल चित्र लोड

$.get('http://domain.net/205.html', function(html){ 
    console.log($(html).find('#c1034')); 
}); 

यही काम करता है लेकिन $(html) की वजह से अपने ब्राउज़र छवियों कि 205 में जुड़े हुए हैं लोड करने के लिए कोशिश करता है .html। उन छवियों को करना मेरे डोमेन पर मौजूद नहीं तो मैं 404 त्रुटियों की एक बहुत कुछ मिलता है।

वहाँ $(html) की तरह लेकिन अपने ब्राउज़र में पूरे पृष्ठ को लोड करने के बिना पेज पार्स करने के लिए कोई तरीका है?

उत्तर

15

regex का उपयोग करें और निकालें सभी <img> टैग

html = html.replace(/<img[^>]*>/g,""); 
+0

वह मेरे लिए काम किया। ध्यान दें कि यह शैली पृष्ठभूमि छवियों के लिए काम नहीं करेगा। इसके लिए आपको एक [एक्सएमएल पार्सर] की आवश्यकता होगी (http://stackoverflow.com/questions/11006216/load-an-html-string-into-jquery-without-requesting-images?rq=1) मुझे लगता है। धन्यवाद! – PiTheNumber

+0

@PiTheNumber और भुवन: FWIW, कि regex बाईपास के लिए छोटा है: http://jsbin.com/wejosoku/1 मुझे लगता है कि यह दोहराए गए एप्लिकेशन के साथ काम करेगा, लेकिन मैं अपनी साइट पर शर्त नहीं लगाऊंगा कोई भी इसके चारों ओर एक रास्ता के साथ आने में सक्षम नहीं है। Regex मूल रूप से महत्वपूर्ण HTML पार्सिंग के लिए अनुपयुक्त है। –

+0

@ टी.जे.क्रॉडर मुझे पता है कि यह सहेज नहीं है लेकिन मेरे मामले में मैं अन्य डोमेन एचटीएमएल कोड पर भरोसा कर सकता हूं। Regex ज्यादातर सब कुछ के लिए बुरा है और मैं जहां भी संभव हो उससे बचने के लिए दृढ़ता से सलाह देता हूं। मुझे एक और समाधान देखने में खुशी होगी लेकिन इसके लिए एक पूर्ण एचटीएमएल पार्सर बड़ा होगा। – PiTheNumber

1

आप या तो jQuerys इस्तेमाल कर सकते हैं remove() विधि छवि तत्वों

console.log($(html).find('img').remove().end().find('#c1034')); 

चयन या HTML स्ट्रिंग से तो दूर करने के लिए।

console.log($(html.replace(/<img[^>]*>/g,""))); 

पृष्ठभूमि छवियों के बारे में कुछ ऐसा है, तो आप कुछ इस तरह कर सकता है:

$(html).filter(function() { 
    return $(this).css('background-image') !== ''; 
}).remove(); 
+0

पहला व्यक्ति काम नहीं करता था। '$ (एचटीएमएल) 'पहले से ही पेज लोड करता है। दूसरा काम किया। धन्यवाद! – PiTheNumber

3

नीचे दिए तरीक़े एचटीएमएल पार्स करने के लिए स्वचालित रूप से चित्रों को लोड कर देगा का उपयोग करना।

var wrapper = document.createElement('div'), 
    html = '.....'; 
wrapper.innerHTML = html; 

उपयोग DomParser एचटीएमएल पार्स करने के लिए है, तो छवियां स्वचालित रूप से लोड नहीं किया जाएगा। जानकारी के लिए https://github.com/panzi/jQuery-Parse-HTML/blob/master/jquery.parsehtml.js देखें।

1

निम्नलिखित रेगेक्स <head>, <link>, <script>, <style> के सभी अवसरों को प्रतिस्थापित करता है, जिसमें background और style AJAX लोड द्वारा लौटाई गई डेटा स्ट्रिंग से विशेषता है।

html = html.replace(/(<(\b(img|style|script|head|link)\b)(([^>]*\/>)|([^\7]*(<\/\2[^>]*>)))|(<\bimg\b)[^>]*>|(\b(background|style)\b=\s*"[^"]*"))/g,""); 

टेस्ट regex: https://regex101.com/r/nB1oP5/1

काश वहाँ के आसपास काम करने के लिए एक एक बेहतर तरीका (regex का उपयोग कर के अलावा अन्य की जगह) है।

3

एक पुराने सवाल को पुनर्जीवित करने के लिए क्षमा करें, लेकिन यह जब कैसे बाहरी संपत्ति लोड करने से पार्स एचटीएमएल रोकने की कोशिश करने के लिए के लिए खोज पहले परिणाम है।

मैंने निक अहमद जैनल्दाद्दीन के जवाब को लिया, हालांकि इसमें एक कमजोरी है कि <script> टैग के बीच के किसी भी तत्व को मिटा दिया जाता है।

<script> 
</script> 
Inert text 
<script> 
</script> 

ऊपर के उदाहरण Inert text में स्क्रिप्ट टैग के साथ हटा दिया जाएगा।

html = html.replace(/<\s*(script|iframe)[^>]*>(?:[^<]*<)*?\/\1>/g, "").replace(/(<(\b(img|style|head|link)\b)(([^>]*\/>)|([^\7]*(<\/\2[^>]*>)))|(<\bimg\b)[^>]*>|(\b(background|style)\b=\s*"[^"]*"))/g, ""); 

इसके अतिरिक्त मैं iframe रों दूर करने के लिए क्षमता को जोड़ा: मैं बजाय निम्नलिखित कर समाप्त हो गया।

उम्मीद है कि यह किसी की मदद करेगा।

0

सभी img तत्व पूरी तरह से निकालने के बजाय, आप सभी src हटाने के लिए निम्न regex का उपयोग कर सकते हैं बजाय जिम्मेदार बताते हैं:

html = html.replace(/src="[^"]*"/ig, ""); 
+0

वह HTML को तोड़ देगा क्योंकि '' तत्व के लिए src विशेषता अनिवार्य है। Https://developer.mozilla.org/de/docs/Web/HTML/Element/img – PiTheNumber

+0

यह सच हो सकता है, लेकिन यह किसी भी व्यक्ति के लिए एक अच्छा वैकल्पिक समाधान है जो अपने सीएसएस चयनकर्ता में आईएमजी टैग का उपयोग करता है या किसी एक से डेटा की आवश्यकता है छवि विशेषताओं। – Royalgamer06