Я пытаюсь написать скрипт 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);
};