如何提取HTML标签但不包括文本

3
如何提取带有属性的标签而不包括文本?
源代码:
<div style='some style' id='some id'>
some text
</div>
<a href='some url'>some link</a>
<img src='some url' />

结果:

"<div style='some style' id='some id'> </div> <a href='some url'> </a> <img src='some url' />"

你可以使用正则表达式来替换标签之间的字符:str.replace(/>[^<]+?</g,"> <") 如果你的标记是有效的甚至只是格式良好的,这个方法完美地工作。 - dandavis
@dandavis 目前我还在考虑其他方法,把这个作为最后的手段。 - Bryan Huang
另一个简单的选择是将标记转换为DOM,删除textNodes,然后获取outerHTML,但这可能会改变标记(引用属性,转换实体,将“disabled”转换为“disabled =”“”,等)。例如,它会将您的apos-delimited属性转换为引号。不确定是否符合您的需求... - dandavis
2个回答

2

试试这个:

sample = $("<div><div style='some style' id='some id'>some text</div><a href='some url'>some link</a><img src='some url' /></div>");
output = removeText(sample);

function removeText(node){
    node = $(node);
    $.each( node.contents(), function(){
        if(this.nodeType == 3) {
            this.parentNode.removeChild(this);
        }else {
            removeText(this);
        }

    });
    return node;
} 

输出:

<div><div style="some style" id="some id"></div><a href="some url"></a><img src="some url"></div>

0

你可以使用 jQuery 的 'clone':

    <div id="some-id">lalala</div>

    var $copy = $('#some-id').clone().html('');//create a copy and remove text
    var str = $('<div>').append($copy);//covert jquery obj to string

try it in console


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接