Javascript 删除不需要的标记(如果在文本之前)
我有以下代码<代码>变量有一个字符串。我想删除Javascript 删除不需要的标记(如果在文本之前),javascript,jquery,html,Javascript,Jquery,Html,我有以下代码变量有一个字符串。我想删除标记、或标记(如果在任何文本之前) 简而言之,我想通过br和不需要的链接删除文本前的所有图像和所有不需要的空格。众所周知,使用正则表达式很难处理HTML 这将更简单、更可靠: 创建DOM片段的步骤 使用jQuery查找要删除的节点 使用.outerHTML重新合成HTML(如果需要) 选择规则是什么还不是100%清楚,但一般方法如下所示: <div class="dir"><a href="/home"></a><
标记、
或
标记(如果在任何文本之前)
简而言之,我想通过
br
和不需要的链接删除文本前的所有图像和所有不需要的空格。众所周知,使用正则表达式很难处理HTML
这将更简单、更可靠:
- 创建DOM片段的步骤
- 使用jQuery查找要删除的节点
- 使用
重新合成HTML(如果需要).outerHTML
<div class="dir"><a href="/home"></a><p><br><a class="foo" href='/contact'>This</a> is content</p></div>
var content='
是内容;
var$content=$(content);//创建未结束的DOM片段
var$allNodes=$content.find(“*”);//外部包装中的所有节点
var$textNodes=$allNodes.contents().filter(函数(){
返回this.nodeType==3;//查找文本节点
});
$allNodes.not($textNodes.parents()).remove();//删除其子代中没有文本节点的所有节点。
$content.find(“a”).contents().unwrap();//如果我理解正确,请打开任何剩余的内容,这就是您要做的
var content = '<div class="dir"><a href="/home"><img src="/img.png"/></a><p><br><a class="foo" href="/contact">This</a> is content</p></div>';
var $content = $(content); // create unappended DOM fragment
var $allNodes = $content.find("*"); // all nodes inside the outer <div> wrapper
var $textNodes = $allNodes.contents().filter(function() {
return this.nodeType === 3; // find text nodes
});
$allNodes.not($textNodes.parents()).remove(); // Remove all nodes that do not have a text node amongst their descendants.
$content.find("a").contents().unwrap(); // Unwrap the contents of any remaining <a> nodes.
var HTML = $content.get(0).outerHTML; // resynthesize HTML, with stuff removed
console.log(HTML);
没有兄弟
,
或
标记
如果这是正确的,那么如果您从DOM获取var内容
,这个jquery解决方案就可以工作:
<div><p><a class="foo" href="/contact">This</a> is content</p></div>
这将遍历页面上所有foo
类的内容…检查节点类型是否为3(这是文本节点的值)…然后获取文本节点父节点的同级,它们是
,
或
标记并移除它们
希望这就是您想要的。@SterlingArcher我想在文本开始之前删除标记,而不是所有标记。如果您可以使用一种好方法,但我想在文本开始之前删除所有不需要的标记。就像
文本从这里开始
删除
上面的文本。@匿名0天,我不知道DOMParser是什么。建议你写一个答案。@MohammedH–mzã,正如我所说,这是一个普遍的方法。你需要努力工作才能得到你想要的东西。它可以是你拥有的相同方法,但是没有jQuery!啊,好的,所以相同的概念与不同的库-酷!我想看看DOMParser解决方案是什么样子的。
<div><p><br><img><a class="foo" href="/contact">This</a> is content</p></div>
<div><p><a class="foo" href="/contact">This</a> is content</p></div>
$('.foo').contents().each(function(){
if(this.nodeType == 3){
$(this).parent().siblings("br, img, p").remove();
}
});