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查找要删除的节点
  • 使用
    .outerHTML
    重新合成HTML(如果需要)
选择规则是什么还不是100%清楚,但一般方法如下所示:

<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();
  }
});