Выбор группы узлов и перенос в <div> - PullRequest
0 голосов
/ 23 мая 2009

Я пытаюсь написать скрипт greasemonkey для довольно неприятно структурированной страницы. Я хотел бы иметь возможность отображать и скрывать различные записи, но они имеют вид:

<a name="first"/>
<h3>First</h3>
Some text....
<!-- end -->
<a name="second"/>
<h3>Second</h3>
Some text....
<!-- end -->

Я надеялся, что смогу обернуть их в

с, например ::
<a name="first"/>
<div name="first>
    <h3>First</h3>
    Some text....
    <!-- end -->
</div>

Как я могу это сделать? Я думал о том, чтобы использовать jQuery-селектор prev ~ siblings, затем проходить итерацию до тех пор, пока не достигну другого совпадения, но затем (a) мне нужно сопоставить следующее вручную, и (b) я не уверен, как затем поместить их в когда это будет сделано?

Спасибо!

PS. Почему я должен использовать & lt; и & gt; написать

вместо угловых скобок?

UPDATE:

Пока у меня есть:

$(document).ready(function(){
    var course = $("meta[name=DEPARTMENT]").attr("content").replace(/^\s+/, "");

    $("a[name^="+course+".]:first").each(function(){
        GM_log(this.name);
        var stop=false;
        $(this).nextAll().filter(function(){
            if ($(this).is("a[name^="+course+".]"))
            {
                stop=true;
            }
            return !stop;
        })
        .wrapAll(document.createElement("div"));
    });
});

Тем не менее, после этого оставляется потерянный текст:

<a name="first"/>
<div name="first>
    <h3>First</h3>
    <!-- end -->
</div>
Some text...

ОБНОВЛЕНИЕ 2: Оказывается, функция nextAll написана только для возврата узлов элемента. Я написал замену:

$.fn.nextAllWithText = function() {
    var ret = [];

    $(this).each(function() {
        var cur = this.nextSibling;
        while (cur && cur != document) {
            ret.push(cur);
            cur = cur.nextSibling;
        };
    });

    return $(ret);
};

1 Ответ

0 голосов
/ 23 мая 2009

: сначала мне не подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...