通常我这样做:
for(i=0;i<elem.parentNode.length;i++) {
if (elem.parentNode[i] == elem) //.... etc.. etc...
}
Run Code Online (Sandbox Code Playgroud)
gsn*_*ers 39
function getChildNumber(node) {
return Array.prototype.indexOf.call(node.parentNode.childNodes, node);
}
Run Code Online (Sandbox Code Playgroud)
这似乎适用于Opera 11,Firefox 4,Chromium 10.其他浏览器未经测试.如果节点没有父节点,它将抛出TypeError(node.parentNode !== undefined如果您关心该情况,请添加一个检查).
当然,Array.prototype.indexOf仍然在函数调用内循环.没有循环就不可能做到这一点.
ken*_*bec 26
你可以算兄弟姐妹...... childNodes列表包括文本和元素节点 -
function whichChild(elem){
var i= 0;
while((elem=elem.previousSibling)!=null) ++i;
return i;
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*ier 16
您可以使用该Array.from()方法将HTMLCollection元素转换为数组.从那里,您可以使用本机.indexOf()方法来获取索引:
function getElementIndex (element) {
return Array.from(element.parentNode.children).indexOf(element);
}
Run Code Online (Sandbox Code Playgroud)
如果您希望节点指数(如反对元素的索引),然后更换children属性与childNodes属性:
function getNodeIndex (element) {
return Array.from(element.parentNode.childNodes).indexOf(element);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用该.call()方法来调用数组类型的本机.indexOf()方法.如果您查看源代码,这就是在jQuery中实现该.index()方法的方法.
function getElementIndex(element) {
return [].indexOf.call(element.parentNode.children, element);
}
Run Code Online (Sandbox Code Playgroud)
同样,使用该childNodes属性代替该children属性:
function getNodeIndex (element) {
return [].indexOf.call(element.parentNode.childNodes, element);
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用spread运算符:
function getElementIndex (element) {
return [...element.parentNode.children].indexOf(element);
}
Run Code Online (Sandbox Code Playgroud)
function getNodeIndex (element) {
return [...element.parentNode.childNodes].indexOf(element);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19222 次 |
| 最近记录: |