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