如何使用jQuery获取指定script标签间的所有DOM元素?
使用jQuery获取指定script标签之间的所有元素
当然可以做到!我来给你捋捋具体的实现思路和代码,完美适配你给出的DOM结构。
首先看你的DOM结构,highlight/begin和highlight/end这两个script标签分别在不同的<p>元素里,所以我们得分三部分来收集中间的元素:
- 开始script所在父元素中,它之后的所有元素
- 开始父元素与结束父元素之间的所有兄弟元素
- 结束script所在父元素中,它之前的所有元素
下面是完整的jQuery代码,每一步都加了注释,方便你理解:
// 1. 先定位到开始和结束的标记script const $begin = $('script[type="highlight/begin"]'); const $end = $('script[type="highlight/end"]'); // 用来存储中间元素的数组 const elementsBetween = []; // 2. 收集开始script所在父元素中,它之后的所有元素 $begin.parent().contents().each(function() { // 跳过开始script本身 if ($(this).is($begin)) return true; // 如果结束script刚好在同一个父元素里,提前结束遍历 if ($(this).is($end)) return false; elementsBetween.push(this); }); // 3. 收集开始父元素和结束父元素之间的所有兄弟元素 $begin.parent().nextUntil($end.parent()).each(function() { // 把整个兄弟元素加进去,如果需要它的所有子元素,也可以追加 $(this).find('*').each(...) elementsBetween.push(this); }); // 4. 收集结束script所在父元素中,它之前的所有元素 $end.parent().contents().each(function() { // 遇到结束script就停止遍历 if ($(this).is($end)) return false; elementsBetween.push(this); }); // 5. 把收集到的元素转成jQuery对象,方便后续操作(比如绑定事件、修改样式等) const $elementsBetween = $(elementsBetween); // 测试示例:输出所有元素的文本内容 $elementsBetween.each(function() { console.log($(this).text().trim()); });
补充小提示
- 如果你的DOM嵌套更深,可以根据需求调整代码,比如在收集兄弟元素时,同时把它们的子元素也加入数组
- 代码里用了
.contents()而不是.children(),所以会包含文本节点(比如你的第二个<p>里的纯文本),如果只需要元素节点,把.contents()换成.children()即可
内容的提问来源于stack exchange,提问作者user-17171
相关产品推荐
相关产品推荐

