我有一类多个'DIV'元素,里面是'p'元素列表。见下文:
<div class="container">
<p>This is content 1</p>
<p>This is content 2</p>
<p>This is content 3</p>
</div>
<div class="container">
<p>This is content 1</p>
<p>This is content 2</p>
<p>This is content 3</p>
</div>
这是我通过悬停调用'p'元素的jQuery代码:
$('.container').children('p').hover(function(){
//get the nth child of p from parent class 'container'
});
如何从父容器类'container'中获取元素'p'的第n个子编号?
如果你盘旋
这是内容1
它应该触发输出为1;
答案 0 :(得分:67)
你可以使用jQuery的index
function。它告诉您给定元素相对于其兄弟姐妹的位置:
var index = $(this).index();
索引是从0开始的,所以如果你正在寻找一个基于1的索引(例如,第一个索引是1
而不是0
),只需添加一个索引:
var index = $(this).index() + 1;
如果您没有使用jQuery并且遇到了这个问题和答案(OP使用的是jQuery),没有它也很简单。 nth-child
仅考虑元素,因此:
function findChildIndex(node) {
var index = 1; // nth-child starts with 1 = first child
// (You could argue that you should throw an exception here if the
// `node` passed in is not an element [e.g., is a text node etc.]
// or null.)
while (node.previousSibling) {
node = node.previousSibling;
if (node && node.nodeType === 1) { // 1 = element
++index;
}
}
return index;
}
答案 1 :(得分:6)
使用.index()
方法的无参数版本来查找元素相对于其兄弟姐妹的位置:
$('.container').children('p').hover(function() {
var index = $(this).index() + 1;
});
请注意.index()
的结果将从零开始,而不是从一开始,因此+ 1
答案 2 :(得分:-1)
$('.container').children('p').hover(function(){
//get the nth child of p from parent class 'container'
var n = 1;
var child = $(this).parent().find("p:eq("+n+")");
});
应该工作!
或者如果你想知道悬停元素的索引:
$('.container').children('p').each(function(index,element) {
// use closure to retain index
$(element).hover(function(index){
return function() { alert(index); }
}(index);
}