鍍金池/ 問答/HTML5  HTML/ 如何刪除一個(gè)標(biāo)簽,但是保留里面的內(nèi)容?

如何刪除一個(gè)標(biāo)簽,但是保留里面的內(nèi)容?

如題:

比如我們有如下一個(gè)HTML

<DIV>
    <P>
        我是正確的內(nèi)容,blablablabla,這里是要?jiǎng)h的<mark data-id='123'>哈哈<A>連接<A/>巴拉巴拉巴拉巴拉</mark>
    </P>
</DIV>

我們需要在用戶進(jìn)行某個(gè)操作時(shí),刪除掉特定的標(biāo)簽,比如上例中的data-id=123的mark標(biāo)簽。
請問各位大神,應(yīng)該怎么做啊?

PS:<mark>可能有多個(gè),可能是不同id的,也可能是相同id的。而且可能出現(xiàn)在任何位置。

回答
編輯回答
無標(biāo)題
2017年11月9日 10:40
編輯回答
鐧簞噯

document.getElementByTagName("div")innerHTML = document.getElementByTagName("div")innerHTML.replace(/<.+?>/g,"")
我這個(gè)思路是用正則表達(dá)式去掉尖括號

2017年9月22日 14:32
編輯回答
青裙

先把要?jiǎng)h除的標(biāo)簽內(nèi)容復(fù)制出來,然后在該節(jié)點(diǎn)前插入進(jìn)去,最后刪除該節(jié)點(diǎn)

var html = $('mark[data-id="123"]').html();
$('mark[data-id="123"]').before(html);
$('mark[data-id="123"]').remove();
2017年10月9日 18:12
編輯回答
玄鳥

可以使用正則表達(dá)式嗎?

2018年3月6日 04:17
編輯回答
雨蝶

嗯嗯,在刪除標(biāo)簽之前,拷貝一份出來,然后進(jìn)行插入,最后將標(biāo)簽刪掉,這是最容易想到的辦法。
其實(shí)可以用一個(gè)變量來進(jìn)行存儲 mark 標(biāo)簽中的內(nèi)容,顯示mark的時(shí)候插入變量,刪除的時(shí)候不用考慮如何拷貝,直接添加到p標(biāo)簽中。
最好的辦法是用js框架進(jìn)行操作,方便、直觀、簡潔。

2017年2月3日 18:33
編輯回答
風(fēng)清揚(yáng)

沒怎么看懂。是刪除特定標(biāo)簽? 既然是特定標(biāo)簽,那么就應(yīng)該找到特定標(biāo)簽的特征,一個(gè)個(gè)刪除。 比如特征就是 所有的 <mark>.

$("p").find("mark").each(function(){
    var html=$(this).html();
    $(this).before(html).remove();
  });
});

如果是刪除里面的所有 tag 直接 用 $('p').text()把 HTML 變成文本再次插入就OK 了。

2017年8月30日 18:53
編輯回答
嫑吢丕

用法closetag(parent,tag,dataid)三個(gè)參數(shù),第一個(gè)是父標(biāo)簽,第二個(gè)是要?jiǎng)h除的tag,第三個(gè)是tag的data-id,若沒傳入data-id,則刪除所有tag,若傳入data-id,則刪除有和傳入data-id相同的tag

 <div>
        <P>
            我是正確的內(nèi)容,blablablabla,這里是要?jiǎng)h的<mark data-id='123'>哈哈<a>連接</a>巴拉巴拉巴拉巴拉</mark>
            <mark>哈哈2</mark>
        </P>
    </div>

   var p = document.getElementsByTagName('p')[0];
    closetag(p,"mark","123");
    function closetag(parent,tag,dataid){
        var tags = parent.getElementsByTagName(tag);
        for(var i=tags.length-1;i>=0;i--){
            if(dataid==null){
                tags[i].outerHTML = tags[i].innerHTML;                
            }else{
                if(tags[i].getAttribute("data-id")===dataid){
                    tags[i].outerHTML = tags[i].innerHTML;
                }
            }                
        }
    }
2017年12月28日 06:17
編輯回答
夏木
$("mark").each(function(){
    $(this).replaceWith($(this).html());
});
2018年2月9日 03:10
編輯回答
不討囍
var markEles = document.getElementsByTagName("mark");
markEles.map(function(markEle){
    var markHtml = markEle.innerHTML;
    markEle.innerHTML = markHtml.replace(/<mark [^>]*>(.*)<\/mark>/,function($1,$2){return $2})
});

你貼上來的case替換是能用的,由于沒有更多的case,不知道考慮完全沒有

2017年2月3日 01:37