我已经更改了我的代码,所以现在可以说有这样的代码:
<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>
我想要做的是删除第一个<a>
元素,然后删除所有<br>
元素,直到该人说出某些内容为止。
成功后,它应该如下:
<p>
This would be where the person would say something.
<br>
<br>
This is even more text.
</p>
<p>
Hello!
</p>
注意:这些人会在博文上发表评论。
答案 0 :(得分:1)
我只能考虑在<p></p>
的innerHtml属性中使用Regexp。
function remove (elem, name) {
var content = elem.innerHTML,
regex = new RegExp('@<a.*?>' + name + '<\/a>(\n)*(<br\s?\/?>|\n)*', 'mgi');
elem.innerHTML = content.replace(regex, '');
}
remove(paragr, 'Wiki Tiki');
你应该使用正则表达式,处理所有场景,你可以获得换行符\n
和/或xhtml符号<br />
问题是因为innerHTML操作会有点慢,但尝试一下,也许它会足够快。
答案 1 :(得分:0)
假设它包含在ID为“theContent”的元素中:
var content = document.getElementById('theContent');
var c = content.innerHTML;
c = c.replace(/@<a([^\/])+\/a>/,'');
c = c.replace(/(\<br>(\s)+)+/,'');
content.innerHTML = c;
答案 2 :(得分:0)
这可能需要考虑更多的检查,但它可能是这样的:
$('p')
.children().filter(function() {
return this.nodeType == Node.TEXT_NODE && $(this).text() == '@';
})
.next('a')
.nextUntil(':not(br)')
.andSelf()
.andSelf()
.remove();
此外,这在IE7及更早版本中不起作用。使用this.nodeType == 3
。
答案 3 :(得分:0)
你可以做这样的事情,我不确定它会有多高效,你可能不得不根据页面中包含的文字改变逻辑 -
$("p").contents().each(function() {
if (this.nodeType == 3 && this.nodeValue.indexOf("This would be") > -1) return false;
$(this).remove()
})
代码只删除所有节点,直到找到文本节点,其中包含“This be be”字样。