我正在创建一个脚本来过滤一些论坛输出,其中包括选择相邻<p>
之间的所有内容,每次更改“p”的数量。 p标签对之间的内容可能无关紧要。有点像这样:
<p><a href="x">...ABC...</a></p>
<<<<<<<< Beginning of what I want >>>>>>>>
<fieldset>...</fieldset>
<font title="...">...</font>
sometext without any tag<br> <-----This cannot be selected by jQuery, help needed here
<a href="...">...</a>
//[0..N] more tags
<<<<<<<< End of what I want >>>>>>>>
<p><a href="x+1">...ABC...</a></p>
[0..N] more "p"'s with similar pattern ("p" with random url in "a")
然后我想将这些流氓代码(未标记的文本)与其邻居一起包装到某个div中,以便我以后可以处理它们。像这样:
<div id="outer">
<div id="1">
<p><a href="x">...ABC...</a></p>
<! Beginning of what I want >
<fieldset>...</fieldset>
<font title="...">...</font>
sometext without any tag<br>
<a href="...">...</a>
//[0..N] more tags
<! End of what I want >
</div>
<div id="2">
<p><a href="x+1">...ABC...</a></p>
</div>
<div id="3">
//something or nothing
</div>
//something or nothing
</div>
棘手的部分是找出它们属于哪个部分并将它们移动到那个部分。因为它们不在任何div或甚至任何标签中。我试过这种方法:
var ps = $("p:contains('ABC')");
ps.each(function(){
if(!($(this).next()[0])){
return true;
}
var me = $(this);
var pa = me.parent().contents();
var nx = me.nextAll("p:contains('ABC')").first()
var i0 = pa.index(me);
var i1 = pa.index(nx);
if (i1 > i0) {
var elements = pa.slice(i0, i1);
elements.each(function(){
//Do something
});
}
});
但是文本总是被遗漏。我认为没有标签,jquery无法选择任何东西?我该怎么办才能让它发挥作用?
答案 0 :(得分:1)
我认为你不会介意它在div中!
jQuery('div.find').each(function(){
$("*").each( function() {
$(this).remove();
});
plugin(this);
});
function plugin(node) {
var next;
if (node.nodeType === 1) {
if (node = node.firstChild) {
do {
next = node.nextSibling;
plugin(node);
} while(node = next);
}
} else if (node.nodeType === 3) {
alert(node.data);
}
}