我正在使用 nextUntil
获取两个元素之间所有内容的方法。但是这个方法不包括text nodes
输出。它给出了一个类似 [<br>, <br>, <br>]
的数组.我怎样才能得到包括文本节点在内的所有内容?
这是 HTML 代码:
$('.content a:contains("spoiler").b:even').each(function() {
$(this).nextUntil('.content a:contains("spoiler").b')
.wrapAll('<div style="border:solid 1px black;"></div>');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="content">
--- <a class="b" href="/?q=spoiler">spoiler</a> ---
<br>
<br> dangerous text here
<br> --- <a class="b" href="/?q=spoiler">spoiler</a> ---
<br> safe text here
<br> --- <a class="b" href="/?q=spoiler">spoiler</a> ---
<br>
<br> dangerous text here
<br> --- <a class="b" href="/?q=spoiler">spoiler</a> ---
</div>
JSFiddle:http://jsfiddle.net/Lwk97rvq/1/
最佳答案
您可以创建自己的 jquery 插件,它的功能与 nextUntil
相同,但包括文本节点:
$.fn.nextUntilWithTextNodes = function (until) {
var matched = $.map(this, function (elem, i, until) {
var matched = [];
while ((elem = elem.nextSibling) && elem.nodeType !== 9) {
if (elem.nodeType === 1 || elem.nodeType === 3) {
if (until && jQuery(elem).is(until)) {
break;
}
matched.push(elem);
}
}
return matched;
}, until);
return this.pushStack(matched);
};
因此您可以调用此 nextUntilWithTextNodes
而不是 nextUntil
并且一切顺利。
关于javascript - jQuery nextUntil 包括文本节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25873650/