Javascript 如何过滤@后跟一个“;a「;元素…和以下内容<;br>;元素?

Javascript 如何过滤@后跟一个“;a「;元素…和以下内容<;br>;元素?,javascript,jquery,Javascript,Jquery,我已经更改了代码,现在让我们说: <p> <a href="#">@Mr. Jingles</a> <br> <br> This would be where the person would say something. // I want to start here <br> <br> This is even more text. </p> <p> <a hre

我已经更改了代码,现在让我们说:

<p>
  <a href="#">@Mr. Jingles</a>
<br>
<br>
This would be where the person would say something.     // I want to start here
<br>
<br>
This is even more text.
</p>
<p>
  <a href="#">@Lady Ladington</a>
<br>
<br>
Hello!
</p>



这就是这个人说话的地方我想从这里开始

这是更多的文本。



你好

我要做的是删除第一个
元素,然后删除所有

元素,直到这个人要说什么为止

如果成功,它应该如下所示:

<p>
This would be where the person would say something.
<br>
<br>
This is even more text.
</p>
<p>
Hello!
</p>

这就是那个人说话的地方。


这是更多的文本。

你好


注意:这些人可能会在博客帖子上发表评论。

假设它包装在ID为“内容”的元素中:

var content=document.getElementById('theContent');
var c=content.innerHTML;
c=c.替换(/@/,'');
c=c.替换(/(\
(\s)+)+/,“”); content.innerHTML=c;
我只能考虑在

的innerHtml属性中使用Regexp

函数删除(元素、名称){
var content=elem.innerHTML,
regex=newregexp('@'+name+'(\n)*(|\n)*','mgi');
elem.innerHTML=content.replace(regex.);
}
删除(段落“Wiki Tiki”);
您可能应该使用正则表达式,为了处理所有场景,可以使用换行符
\n
和/或xhtml换行符


问题是,由于innerHTML操作,速度会有点慢,但请尝试一下,也许速度足够快。

这可能需要考虑更多的检查,但可能是这样的:

$('p')
    .children().filter(function() {
        return this.nodeType == Node.TEXT_NODE && $(this).text() == '@';
    })
    .next('a')
    .nextUntil(':not(br)')
    .andSelf()
    .andSelf()
    .remove();

此外,这在IE7及更早版本中也不起作用。对于使用this.nodeType==3

您可以这样做,我不确定它的效率,您可能需要根据页面中包含的文本更改逻辑-

$("p").contents().each(function() {
    if (this.nodeType == 3 && this.nodeValue.indexOf("This would be") > -1) return false;
    $(this).remove()
})
代码只是删除所有节点,直到找到包含单词“This will be”的文本节点


演示-

我更改了场景并将@放在
的内部。如何删除第一个
,然后删除下面的

,直到注释开始。我已经用其他东西解决了这个问题。我将@放在
的内部,这样我就可以使用
.remove()
来摆脱它。
$('p')
    .children().filter(function() {
        return this.nodeType == Node.TEXT_NODE && $(this).text() == '@';
    })
    .next('a')
    .nextUntil(':not(br)')
    .andSelf()
    .andSelf()
    .remove();
$("p").contents().each(function() {
    if (this.nodeType == 3 && this.nodeValue.indexOf("This would be") > -1) return false;
    $(this).remove()
})