javascript - jQuery nextUntil 包括文本节点

标签 javascript jquery wrapall

我正在使用 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/

相关文章:

javascript - 单击时按钮不改变其位置

jquery 动画延迟

javascript - browserify 多个模块 |与 envify 和 brfs

javascript - 提取并调用元素的 onclick HTML 属性中定义的 JavaScript 函数(使用 jQuery attr/prop)

javascript - 如何等到jquery效果循环完成后再执行函数

javascript - 如何包装所有相邻且具有相同类的元素?

jquery - 尝试 jQuery wrapAll 似乎将内容包装两次

jquery - 寻找一个类似于wrapAll的jQuery函数,它只会包装连续的元素

javascript - 再次点击后,点击的图片不会回到上一张图片

javascript - 我是否可以始终假设不返回 Promise 或 Observable 的函数是 JavaScript 中的同步函数?