2011-10-04 50 views
0

我已經改變了我的代碼,所以現在可以說有這樣的:如何過濾@後跟「a」元素...以及以下<br>元素?

<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

假設它包裹在一個元件與「theContent」的ID:

var content = document.getElementById('theContent'); 
var c = content.innerHTML; 
c = c.replace(/@<a([^\/])+\/a>/,''); 
c = c.replace(/(\<br>(\s)+)+/,''); 
content.innerHTML = c; 
1

我只能認爲在<p></p>的文字屬性使用正則表達式的。

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 />

問題是,這將是一個有點慢,因爲的內部HTML操作,但試試看,也許它會足夠快。

+0

希望這可以做到。 ''] +?> @'+ name + ...' – guzart

+0
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

0

你可以做這樣的事情,我不知道它將如何高效是,你可能要改變邏輯根據包含在你的頁面中的文本 -

$("p").contents().each(function() { 
    if (this.nodeType == 3 && this.nodeValue.indexOf("This would be") > -1) return false; 
    $(this).remove() 
}) 

的代碼只是刪除所有節點,直到它找到文本節點,並在其中包含「This would be」。

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