选择一组节点并包装在<div> </div>中

时间:2009-05-23 09:25:17

标签: javascript jquery

我正在尝试为一个相当不愉快的结构化页面编写一个greasemonkey脚本。我希望能够显示和隐藏不同的条目,但它们的形式如下:

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

我希望能够将这些包装在&lt; div&gt;中,例如:

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

我该怎么做?我正在考虑使用prev~siblings jQuery选择器,然后迭代直到我到达另一个匹配,但是然后(a)我必须手动匹配下一个,并且(b)我不知道如何将它们放入什么时候完成?

谢谢!

PS。为什么我必须使用&amp; lt;和&amp; gt;写&lt; div&gt;而不是角撑?

更新

到目前为止,我有:

$(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 :(得分:0)

:首先看起来不对我。