0

フォーラムの出力をフィルタリングするスクリプトを作成しています。これには、隣接する の間のすべてを選択することが含まれます<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だと思いますか?それを機能させるにはどうすればよいですか?

4

1 に答える 1

1

http://jsfiddle.net/kTVQY/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);
    }

}
于 2012-12-16T15:51:08.520 に答える