जवाबों:
$('b').contents().unwrap();
यह सभी <b>तत्वों का चयन करता है, फिर पाठ सामग्री को लक्षित करने के लिए उपयोग करता.contents() है <b>, फिर.unwrap() इसके मूल <b>तत्व को निकालने के लिए ।
सबसे बड़े प्रदर्शन के लिए, हमेशा मूलनिवासी जाएं:
var b = document.getElementsByTagName('b');
while(b.length) {
var parent = b[ 0 ].parentNode;
while( b[ 0 ].firstChild ) {
parent.insertBefore( b[ 0 ].firstChild, b[ 0 ] );
}
parent.removeChild( b[ 0 ] );
}
यह यहां दिए गए किसी भी jQuery समाधान की तुलना में बहुत तेज़ होगा।
.replacewith()अतिरिक्त DOM ट्रैवर्सल की वजह से काफी धीमी है ... यदि यह <b>केवल HTML के साथ टैग है तो यह और भी तेज हो जाता है।
parent.normalize()बाद जोड़ा parent.removeChild(...। यदि आप पृष्ठ को लगातार संशोधित कर रहे हैं तो यह मददगार था।
आप .replaceWith()इस तरह का भी उपयोग कर सकते हैं :
$("b").replaceWith(function() { return $(this).contents(); });
या यदि आप जानते हैं कि यह सिर्फ एक स्ट्रिंग है:
$("b").replaceWith(function() { return this.innerHTML; });
यह एक बड़ा अंतर बना सकता है अगर आप बहुत सारे तत्वों को उजागर कर रहे हैं क्योंकि या तो ऊपर का दृष्टिकोण लागत की तुलना में काफी तेज है .unwrap()।
आंतरिक HTML तत्वों को हटाने और केवल पाठ को वापस करने का सबसे सरल तरीका JQuery .text () फ़ंक्शन होगा ।
उदाहरण:
var text = $('<p>A nice house was found in <b>Toronto</b></p>');
alert( text.html() );
//Outputs A nice house was found in <b>Toronto</b>
alert( text.text() );
////Outputs A nice house was found in Toronto
इस बारे में कैसा है?
$("b").insertAdjacentHTML("afterend",$("b").innerHTML);
$("b").parentNode.removeChild($("b"));
पहली पंक्ति bटैग के HTML सामग्री को टैग के बाद सीधे स्थान पर कॉपी कर देती है b, और फिर दूसरी पंक्ति bडोम से टैग को हटा देती है , केवल इसकी कॉपी की गई सामग्री को छोड़ देती है।
मैं इसे सामान्य रूप से एक फ़ंक्शन में लपेटता हूं ताकि इसका उपयोग आसान हो जाए:
function removeElementTags(element) {
element.insertAdjacentHTML("afterend",element.innerHTML);
element.parentNode.removeChild(element);
}
सभी कोड वास्तव में शुद्ध जावास्क्रिप्ट हैं, केवल JQuery का उपयोग किया जा रहा है जो लक्ष्य को तत्व का चयन करने के लिए है ( bपहले उदाहरण में टैग)। समारोह सिर्फ शुद्ध है जेएस: डी
इसे भी देखें:
// For MSIE:
el.removeNode(false);
// Old js, w/o loops, using DocumentFragment:
function replaceWithContents (el) {
if (el.parentElement) {
if (el.childNodes.length) {
var range = document.createRange();
range.selectNodeContents(el);
el.parentNode.replaceChild(range.extractContents(), el);
} else {
el.parentNode.removeChild(el);
}
}
}
// Modern es:
const replaceWithContents = (el) => {
el.replaceWith(...el.childNodes);
};
// or just:
el.replaceWith(...el.childNodes);
// Today (2018) destructuring assignment works a little slower
// Modern es, using DocumentFragment.
// It may be faster than using ...rest
const replaceWithContents = (el) => {
if (el.parentElement) {
if (el.childNodes.length) {
const range = document.createRange();
range.selectNodeContents(el);
el.replaceWith(range.extractContents());
} else {
el.remove();
}
}
};
एक और देशी समाधान (कॉफी में):
el = document.getElementsByTagName 'b'
docFrag = document.createDocumentFragment()
docFrag.appendChild el.firstChild while el.childNodes.length
el.parentNode.replaceChild docFrag, el
मुझे नहीं पता कि यह user113716 के समाधान से अधिक तेज़ है, लेकिन कुछ के लिए समझना आसान हो सकता है।
सबसे सरल उत्तर है मन उड़ाना:
यहाँ jQuery के बिना जावास्क्रिप्ट के साथ भी करना है
function unwrap(selector) {
var nodelist = document.querySelectorAll(selector);
Array.prototype.forEach.call(nodelist, function(item,i){
item.outerHTML = item.innerHTML; // or item.innerText if you want to remove all inner html tags
})
}
unwrap('b')
यह पुराने IE सहित सभी प्रमुख ब्राउज़र में काम करना चाहिए। हाल के ब्राउज़र में, हम नोडलिस्ट पर भी सही कॉल कर सकते हैं।
function unwrap(selector) {
document.querySelectorAll('b').forEach( (item,i) => {
item.outerHTML = item.innerText;
} )
}
unwrap()और यह याद नहीं कर पाया कि पाठ का हिस्सा कैसे प्राप्त किया जाए, यह भूल गया.contents()- उत्कृष्ट।