[英]Select all elements between two p-elements
我正在寻找一种标记/选择两个选定元素之间的所有元素的好方法。
想像
<parent>
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
</parent>
父级上有一个点击处理程序。 用户现在可以在此列表中选择两个p元素,然后介于两者之间的所有p元素都应被“激活”。
我正在考虑一个类似的系统:
我不知道该怎么做3,期望采用蛮力方法(在两个方向反复迭代,看看是否存在)
关于我的情况:父母可能包含几千个p。
感谢您的帮助/想法!
雷托
要确定首先出现哪个元素,您可以执行以下操作:
$(a).index() < $(b).index()
或者,一种更快的方法:
$(a).prevAll().length < $(b).prevAll().length
请注意,只有当a
和b
具有相同的父对象时,这两种方法才可以正常工作。
关于我的情况:父母可能包含几千个p。
如何添加<p>
? 也许您可以给他们每个人一个与他们的位置相对应的ID(例如p1
, p2
...)-这肯定可以使您不必使用上述方法来确定他们的位置。
在DOM级别3中定义了compareDocumentPosition
方法,用于比较两个DOM节点的位置。
您可以将其用作:
firstPara.compareDocumentPosition(otherPara);
如果返回值为2
或Node.DOCUMENT_POSITION_PRECEDING
,则firstPara
在otherPara
之前。
还有一个jQuery插件 。
我喜欢@JP添加一些标识符以快速确定其位置而无需查看任何其他元素的方法。 HTML5的数据属性也是用于存储此值的选项。
<parent>
<p data-pos="1">..</p>
<p data-pos="2">..</p>
..
</parent>
作为$(e).attr('data-pos')
嘿Reto这是我在jquery中准备的解决方案,希望对您有所帮助:
<div id="test">
<p>abc</p>
<p>def</p>
<p>ghi</p>
<p>jkl</p>
</div>
<script>
var a = $('#test').find('>p');
var cli = [], range;
$('#test').delegate("p",'click', function(event){
if (cli.length < 2){//if there are less than 2 clicks in the queue
cli.push(a.index(event.target));
}
else{//reset queue and recall the function
cli = [];
arguments.callee(event);
}
if (cli.length == 2){//if there are 2 clicks
//filter from the initial selection only the elements between the two clicks
range = a.filter(":lt("+cli[1]+"):gt("+cli[0]+")");
if (cli[0]<cli[1]) {//aply some style to highlight and then revert
range.css({color:'red'});
setTimeout(function(){range.css({color:'black'})}, 1000);
}
}
});
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.