如何过滤@后跟“a”元素......以及以下<br/>元素?

时间:2011-10-04 16:15:28

标签: 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 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>

注意:这些人会在博文上发表评论。

4 个答案:

答案 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”字样。

演示 - http://jsfiddle.net/ipr101/TTuDw/3/