2012-07-11 38 views
7

से सभी विशिष्ट HTML टैग मैं एक चर है कि इस तरह के रूप में पाठ और html टैग, के एक स्ट्रिंग शामिल है। मान लें कि उदाहरण के लिए सभी p और span टैग कहें। strip span tags from string with jquery:Jquery:</p> <pre><code>var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; </code></pre> <p>मैं एक खास प्रकार के सभी टैग निकालना चाहते हैं: पट्टी स्ट्रिंग

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; 
var $temp = $(temp); 
$("p", $temp).replaceWith("foo"); 
alert($temp.html()); //returns "Some text" 

निकटतम प्रतिक्रिया मैं मिल सकता है निक Craver द्वारा इस जवाब है:

यह सबसे अच्छा मैं के साथ आ सकता है।

+0

कि _certain type_ क्या है? – undefined

+0

संपादित प्रश्न: पी टैग और स्पैन टैग वे हैं जिन्हें मैं प्रतिस्थापित करना चाहता हूं। लेकिन यह भविष्य में बदल सकता है। – iammatthew2

उत्तर

12

डेमो: http://jsfiddle.net/VwTHF/1/

$('span, p').contents().unwrap(); 

.contents() ऐसे प्रत्येक टैग के भीतर तत्वों और पाठ मिल जाएगा, और .unwrap तत्व प्रत्येक सामग्री अनुभाग लपेटकर निकाल देंगे।

अपने वर्तमान दृष्टिकोण के आधार पर यह कुछ इस तरह दिखेगा:

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; 
var $temp = $(temp); 
$temp.find('span, p').contents().unwrap().end().end(); 

आप मूल वस्तु को लक्षित जारी रखना चाहते हैं, तो आप .end() उपयोग करने के लिए फिल्टर साफ करने के लिए किया है।

+0

आशा है कि मैंने आपके प्रश्न को गलत समझा नहीं है। आप सिर्फ टैग से छुटकारा पाने की कोशिश कर रहे हैं लेकिन पाठ को सही छोड़ दें? – nbrooks

+0

हां, मैं बस कुछ टैग को हटाना चाहता हूं और टेक्स्ट और अन्य सभी टैग रखना चाहता हूं। लेकिन मैं इस उदाहरण में उपरोक्त काम नहीं कर सका: [http://jsfiddle.net/nEFhA/] – iammatthew2

+0

@ iammatthew2 यह पूरी तरह से काम करता है। आप jQuery शामिल करना भूल गए: http: // jsfiddle।नेट/WPpqE/(आपको बाईं ओर विकल्पों में उपयोग करने के लिए ढांचे को निर्दिष्ट करना होगा) – nbrooks

2

आप jquery plugin HTML Clean को आजमा सकते हैं। उदाहरण में वे प्रदान करते हैं:

$.htmlClean("<H1 class=\"header\"><P>Nested P Test</H1>", {format:true}); 

=> 
<h1> 
     Nested P Test 
</h1> 

आप {removeTags:[p]} साथ विशिष्ट टैग की जगह ले सकता और यह अभी भी सिर्फ टैग सामग्री प्रस्तुत करना होगा।

+0

धन्यवाद! मैं इसे आज़मा दूंगा, लेकिन मैं सोच रहा था कि Jquery कोड की कुछ पंक्तियों के साथ इसका ख्याल रख सकता है। – iammatthew2

0

मुझे कुछ ऐसा ही करना था: <b>, <i> या <u> के अलावा किसी भी HTML टैग को रखने से टेक्स्ट का एक ब्लॉक रखें। इस सवाल और कई अन्य लोगों ने मुझे अपने स्वयं के कार्य की ओर इशारा किया:

function cleanNonFormattingTags(htmlContents) { 
    if (htmlContents && htmlContents.length) { 
     var result = ''; 
     htmlContents.each(function() { 
      var $child = $(this), type = $child.prop('tagName'), isTextNode = this.nodeName == "#text"; 
      if (isTextNode) { 
       result += this.textContent; 
      } 
      else if (type == 'B' || type == 'U' || type == 'I' || type == 'BR') { // Allow only these types of tags 
       var innerContent = cleanNonFormattingTags($child.contents()); 
       var $newTag = $(document.createElement(type)).html(innerContent); 
       result += $newTag[0].outerHTML; 
      } 
      else { 
       result += cleanNonFormattingTags($child.contents()); 
      } 
     }); 
     return result; 
    } 
    return htmlContents.text(); 
} 

आशा है कि इससे मदद मिलती है!

0

मैं @nbrooks पर अनुसरण करूंगा क्योंकि उसका जवाब आप जो चाहते हैं उसके बहुत करीब है, लेकिन काफी नहीं। @nbrooks ने यह संकेत देकर समाधान पर मारा कि एचटीएमएल() आपको एक टैग में लपेटा गया डेटा देता है। इसलिए समाधान आपके एचटीएमएल को एक टैग में लपेटना है। यह आपके लिए चाल करना चाहिए:

var temp = "<div>Some text</div><p>More text<span>here</span></p><p>Even more</p>"; 
$("<span>" + temp + "</span>").find('span,p'). 
    contents().unwrap().end().end().html()` 

उदाहरण के लिए http://jsfiddle.net/18u5Ld9g/1/ देखें।

एक अधिक सामान्य समारोह के रूप में:

function stripTags(html, tags) { 
    // Tags must be given in CSS selector format 
    return $("<span>" + html + "</span>").find(tags). 
    contents().unwrap().end().end().html(); 
} 
संबंधित मुद्दे