- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
正如标题所说,我试图找出 jQuery 的 .prevAll()
和 .nextAll()
背后的逻辑(并在纯 JS 中复制)。查看源代码并没有像我希望的那样有帮助。
重要的是要记住 prevNodes 也可以嵌套在其他元素中。所以这不是选择 sibling 的问题。
这是我到目前为止的想法:
// args should be two selectors, source node and previous nodes
const prevAll = (...args) => {
// select all the nodes that matches the two selectors
let elements = document.querySelectorAll(args.join(', '));
elements = Array.from(elements);
// get index of the source node inside all elements
const index = elements.indexOf(document.querySelector(args[0]));
// return everything before that index
if (index >= 0)
return elements.slice(0, index);
return [];
}
const prevNodes = prevAll('.start-node', '.prev-node')
测试
// args should be two selectors, source node and previous nodes
const prevAll = (...args) => {
// select all the nodes that matches the two selectors
let elements = document.querySelectorAll(args.join(', '));
elements = Array.from(elements);
// get index of the source node inside all elements
const index = elements.indexOf(document.querySelector(args[0]));
// return everything before that index
if (index >= 0)
return elements.slice(0, index);
return [];
}
const prevNodes = prevAll('.start-node', '.prev-node')
console.log(prevNodes)
<div class="prev-node"></div>
<div class="prev-node"></div>
<div class="prev-node"></div>
<div class="wrapper">
<div class="prev-node"></div> <!-- this will be included as well -->
</div>
<!-- start here -->
<div class="start-node"></div>
<div class="next-node"></div>
由于很多原因,这显然不是完美的解决方案。我认为起始节点选择器应该是一个唯一的节点。否则这将无法按预期工作。我可以将第一个参数作为真正的 Element 对象传递,但这样逻辑会复杂得多。
关于如何处理这个问题还有其他想法吗?
最佳答案
这只是 prevAll()
但应该很明显如何走另一条路 (.nextElementSibling
) :)
let prevAll = (selector, restrictionSelector = "") => {
let elements = Array.from(document.querySelectorAll(selector)),
restrictedElements = restrictionSelector ? Array.from(document.querySelectorAll(restrictionSelector)) : [],
result = [];
elements.forEach((element) => {
let prevElement = element.previousElementSibling;
while (prevElement) {
if (restrictedElements.length === 0 || restrictedElements.some((r) => r === prevElement)) {
result.push(prevElement);
}
prevElement = prevElement.previousElementSibling;
}
});
return result;
}
let test = prevAll("div.start-node");
console.log(test);
test = prevAll("div.start-node", "div.wrapper");
console.log(test);
<div class="prev-node"></div>
<div class="prev-node"></div>
<div class="prev-node"></div>
<div class="wrapper">
<div class="prev-node"></div>
</div>
<!-- start here -->
<div class="start-node"></div>
<div class="next-node"></div>
关于jquery - $.prevAll([selector]) 和 $.nextAll([selector]) 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38661696/
在 nhibernate doco 中声明要使用流行缓存使用提供程序类“NHibernate.Caches.Prevalence.PrevalenceCacheProvider, NHibernate
我正在尝试使用 jQuery 获取内容中第一个 h2 标记之前的所有段落。这是我正在使用的代码: $(".content").find("h2:first").prevAll().text() 它正在
我正在寻找一种与 jQuery .prevAll() 类似的方法:以逻辑且可用的排序顺序返回 DOM 节点的类似数组的对象(基于元素向后移动的步数),但循环遍历兄弟节点,并获取下一个元素。比方说:
我有以下(人工)DOM: xxx yyy zzz 111 然后在$(document).ready中我这样做: $('.essence').click(function() {
我有 2 个选择字段,您可以在其中选择时间,从和到。我想阻止用户在“从”之前选择“到”时间。 问题是,如果您选择“来自”08:30,第一次它正常工作时,您无法选择低于此的“至”。但是,如果您将第一个选
我对此主题进行了很多研究,但没有取得任何成功。 问题 当我尝试做rowspan时基于自定义属性rowspanx那时它无法正常工作。 我如何基于rowspanx制作rowspan? 所以我试图用 pre
出于某种原因,我似乎无法让 prevAll 使用选择框的选项。 我在这里想做的是将 omday 之前的所有选项标记为禁用。 JQ 忽略它是否有原因或者我的代码有问题? 这是我的代码: jQuery(d
我正在尝试实现一个您已经见过一千次的简单评级系统。我有 5 个评级“星”,从 1 到 5。当将鼠标悬停在星上时,该星将变为“正面”图像,并且所有较低的星也应更改。因此,当您将鼠标悬停在“3”上时,图像
我使用这段代码更改了前一个文本框的文本,但它不起作用,我该怎么办? 我尝试添加一个 CSS 类以确保它找到文本框,当然它找到了那个文本框但不能更改值。
单击按钮后,我尝试在 DOM 中进一步选择单个同级。我只想向上找到最接近的同级(在生产中,按钮之间有更多的 HTML,因此更有必要以这种方式将其拆分)。我使用 prevAll(selector:fir
sky sea earth moon js $(document).on('click', '.spant', function () { var a = $(this).prevAll('.
如何在 JavaScript 中实现这一点? function prevAll (element) { // some code to take all siblings before ele
我正在获取从 getSelection 范围返回的文本节点 (node.nodeType == 3),例如: var selectionRange = selection.getRangeAt(0);
我正在寻找一些东西,使我能够单独控制 .prevAll() 或 .nextAll() jQuery 方法返回的每个元素。 类似于: 还有类似的东西: $('
我有 4 个空的星形图标。每次前进时,前一颗星都会被遮住。就像这个 link 中 Jquery 示例中的 prevAll() .但我希望它以 Angular 方式完成。 到目前为止,这是我的工作:
当用户将鼠标悬停在"thumb"类的链接上时,与"title"类最接近的链接应具有"media-link类-hover" 应用于它。如何做到这一点? 我尝试了 closest() 以及这个,但似乎没有
我在 jQuery 中有这个函数: $(document).on('mouseover', '.star', function () { $(this).prevAll().addBack().a
我实质上是在 Web 应用程序上创建一个带有选项卡的向导,在事件选项卡之前的选项卡将以一种方式(绿色)表示完成,而在它之后的选项卡以另一种方式设置样式以指示未完成(灰色) .
正如标题所说,我试图找出 jQuery 的 .prevAll() 和 .nextAll() 背后的逻辑(并在纯 JS 中复制)。查看源代码并没有像我希望的那样有帮助。 重要的是要记住 prevNode
我有一个表单,其中包含信息的 div 是输入字段的兄弟。 我想专注于给定的输入字段以仅显示其兄弟项,因此我使用 .prevAll 和 :first 选择正确的 div 以从中删除类“隐藏”。这适用于
我是一名优秀的程序员,十分优秀!