选择两个 p 元素之间的所有元素
我正在寻找一种很好的方法来标记/选择两个选定元素之间的所有元素。
想象一下
<parent>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
</parent>
父级上有一个点击处理程序。用户现在可以在此列表中选择两个 p 元素,然后中间的所有 p 元素都应该被“激活”。
我正在考虑这样的系统:
- 第一次单击:标记/记住第一个元素 ->第二
- 次单击:标记/记住第二个元素 -> B
- 确定 A 是否在 B 之前
- 执行 a A.nextUntil(B) (除非 B 在 A 之前)
我不知道该怎么做 3,期待暴力方法(在两个方向迭代并查看它是否存在)
- dom 内部是否知道哪个元素出现在另一个元素之前?
- 还有更好的想法吗?
关于我的情况:父级可能包含数千个 p。
感谢您的帮助/想法!
雷托
I'm looking for a nice way to mark/select all elements between two selected elements.
Imagine
<parent>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
</parent>
There's a click handler on parent. The user now can select two p element in this list an then all p-elements in between should get 'activated'.
I'm thinking about a system like:
- first click: mark/remember first element -> A
- second click: mark/remember second element -> B
- determine whether or not A is before B
- do a A.nextUntil(B) (unless B is before A)
I have no idea how to do 3, expect the brute force approach (iterate in both directions and see if it is there)
- Does the dom internally know what element comes before another?
- Are there any nicer ideas?
About my situation: parent could contain several thousand p's.
Thanks for your help/ideas!
Reto
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要确定哪个元素先出现,您可以简单地执行以下操作:
或者,一种稍微更快的方法:
请注意,只有当
a
和b
具有相同的父级时,这两种方法才能正常工作。是如何添加的?也许您可以为他们每个人提供一个与其位置相对应的 ID(例如
p1
、p2
...)——这肯定会让您不必使用以上方法。To determine which element comes first you could simply do:
Or, a slightly faster approach:
Note, both of these approaches will only work properly if
a
andb
have the same parent.How are the
<p>
s added? Maybe you could give them each an ID corresponding to their position (e.g.p1
,p2
...) -- this would definitely save you from having to determine their positions using the above approaches.在 DOM 级别定义了一个方法
compareDocumentPosition
3 比较两个DOM节点的位置。您可以将其用作:
如果返回值为
2
或Node.DOCUMENT_POSITION_PRECEDING
,则firstPara
位于otherPara
之前。还有一个 jQuery 插件。
我喜欢 @JP 添加一些标识符来快速确定其位置而无需查看任何其他元素的方法。 HTML5 的数据属性也是存储该值的一个选项。
访问方式为
$(e).attr('data-pos')
There is a method
compareDocumentPosition
defined in DOM level 3 to compare the position of two DOM nodes.You would use it as:
If the return value is
2
orNode.DOCUMENT_POSITION_PRECEDING
, thenfirstPara
comes beforeotherPara
.There is also a jQuery plugin for it.
I like @J-P's approach of adding some identifier to quickly determine their position without looking at any other elements. HTML5's data attributes are also an option for storing this value.
Access as
$(e).attr('data-pos')
嘿 Reto 这是我用 jquery 编写的解决方案,希望它有所帮助:
hey Reto here's a solution i cooked up in jquery, hope it helps: