2013-03-19 7 views
6

मैं इस तरह कुछ HTML हैनिकालें या तत्वों की खाली सामग्री

$('*').empty(); 

या

$('*').contents().empty(); 

हालांकि यह हटाने/खाली पहली अवधि और उसकी सामग्री जो div और कड़ी है जाएगा। उन्हें खाली करते समय तत्वों को संरक्षित करने के लिए मैं क्या कर सकता हूं? तो अंत परिणाम होगा:

<span> 
    <div></div> 
    <a href=""></a> 
</span> 

कृपया ध्यान दें कि मैं कुछ 'सार्वभौमिक' ढूंढ रहा हूं जिसे किसी भी HTML पर लागू किया जा सकता है। उपर्युक्त सिर्फ एक उदाहरण है, वास्तव में एचटीएमएल संरचना में अधिक डेटा होगा।

Example at JsFiddle

+0

मैं JsFiddle – Youss

+2

पहली चीज़ के लिए लिंक जोड़ी, '' div' भीतर span' http जैसा – thecodeparadox

+1

नज़र नहीं है रखने: // stackoverflow .com/प्रश्न/2 9 8750/कैसे-करें-i-select-text-nodes-with-jquery –

उत्तर

3

रिकर्सिवली सभी नोड्स के माध्यम से लूप, और सभी बच्चों जिसका nodeType संपत्ति के बराबर होती है 3 (Node.TEXT_NODE) को हटा दें। jQuery सिर्फ टेक्स्ट नोड्स का चयन नहीं कर सकता है, इसलिए यह वेनिला जावास्क्रिप्ट का उपयोग करके किया जा सकता है।

उदाहरण:

function removeText(node) { 
    if (!node || !node.childNodes || !node.childNodes.length) return; 
    for (var i=node.childNodes.length-1; i>=0; --i) { 
     var childNode = node.childNodes[i]; 
     if (childNode.nodeType === 3) node.removeChild(childNode); 
     else if (childNode.nodeType === 1) removeText(childNode); 
    } 
} 

या, एक jQuery प्लगइन में पैक:

$.fn.removeText = function() { 
    for (var i=this.length-1; i>=0; --i) removeText(this[i]); 
    return this; 
}; 

http://jsfiddle.net/hcKsX/

+0

यह मेरे उदाहरण में काम नहीं करता – Youss

+1

@Youss मैंने एक पहेली जोड़ा। यह काम तो ठीक करता है। आपके उदाहरण के साथ: http://jsfiddle.net/hcKsX/1/ –

+0

+1 मेरे लिए काम किया। अच्छा समाधान। –

2

मूल आइटम के बच्चों जाओ और इस तरह की तरह उनके एचटीएमएल सेट:

$('#myspan').children().html(''); 

jsFiddle

+2

घोंसले के अधिक स्तरों के बारे में क्या? –

1

ये समाधान ठीक हैं, लेकिन उनमें से कोई भी आपकी स्थिति को पूरा नहीं करता है।

उदाहरण # 1: पत्र-गांठ के अंदर सभी पाठ हटा

$('body *:not(:has(*))').empty() 

परिणाम:

<span>SPAN 
    <div></div> 
    <a href=""></a> 
</span> 

उदाहरण # 2: सिर्फ एक नोड के बच्चों के अंदर सभी पाठ हटा

$('body span').children().html('') 

परिणाम:

<span>SPAN 
    <div></div> 
    <a href=""></a> 
</span> 

(ऊपर जैसा ही)। हालांकि, घोंसले के 2 से अधिक स्तर होने पर यह समाधान काम नहीं करेगा।

अन्य समाधानों में समान गिरावट आई है।

असली समस्या यह है कि एक नोड के पाठ को साफ़ करने का कोई अच्छा तरीका नहीं है जो माता-पिता नोड और टेक्स्ट नोड दोनों है। आपको या तो एक साथ कुछ हैक करना चाहिए या हर बार अपना विचार दोबारा प्रस्तुत करना चाहिए।

+0

मैं आपको बहुत स्पष्ट समझता हूं :) फिलहाल मैं बीबीसी समाचार स्क्रैप कर रहा हूं। अब तक anwsers में कोड का उपयोग HTML संरचना में बहुत से 'नुकसान' करता है – Youss

0

यह एक डोम वृक्ष में सभी पाठ नोड्स निकाल देना चाहिए:

$('*').contents().filter(
    function() { 
    return this.nodeType == 3; 
}).remove(); 
संबंधित मुद्दे