这是我的代码,它没有提醒任何东西,也没有返回任何好的东西:( 第一部分工作正常 但后来它没有:(我似乎无法弄清楚问题是什么..
this.getNextItem = function(o) {
// given <li> playlist item, find next <li> and then <a>
if (o.nextElementSibling) {
o = o.nextElementSibling;
}
else {
o = o.nextSibling;
}
while (o && o.className !== 'playerr') {
if (o.nextElementSibling) {
o = o.nextElementSibling;
} else {
o = o.nextSibling;
}
}
if(o){ if (o.className !== 'playerr') { //nodeName.toLowerCase()
return null;
} else {
alert(o.className);
alert(o.getElementsByTagName('a')[0]);
return o.getElementsByTagName('a')[0];
}}
};
如果你想查看完整的上下文http://beastdrops.com然后在consol中运行页面(&#34; content2&#34;),以便进入新的&#34;播放器&#34; 将歌曲转发到最后然后当它即将改变到下一个时它不会...... :(这就是这个剧本必须做的事情
答案 0 :(得分:4)
好的,根据您的评论,看起来您想要nextByClass()
,所以这是一个版本:
function hasClass(elem, cls) {
var str = " " + elem.className + " ";
var testCls = " " + cls + " ";
return(str.indexOf(testCls) != -1) ;
}
function nextByClass(node, cls) {
while (node = node.nextSibling) {
if (hasClass(node, cls)) {
return node;
}
}
return null;
}
工作演示:http://jsfiddle.net/jfriend00/3L9FL/
您可以使用它来查找与所需类相同级别的下一个项目,如下所示:
// assumes you pass it the node for the starting <li>
// returns first link in next <li> with the desired classor null if none
this.getNextItem = function(node) {
node = nextByClass(node, "playerr");
if (node) {
return node.getElementsByTagName('a')[0];
}
return null;
}
旧版本的答案取代了评论中的澄清:
根据代码中的注释,看起来给定一个<li>
标记的元素,您只想在同一级别找到下一个<li>
。如果是这种情况,这是一个非常简单的函数,可以找到相同tagName的下一个兄弟:
// gets the next sibling with the same tagName as the starting point
// returns null if none found
function nextByTag(node) {
var tag = node.tagName;
while (node = node.nextSibling) {
if (node.tagName === tag) {
return node;
}
}
return null;
}
您可以使用它来查找下一个<li>
中的第一个后代链接,如下所示:
// assumes you pass it the node for the starting <li>
// returns first link in next <li> or null if none
this.getNextItem = function(node) {
node = nextByTag(node);
if (node) {
return node.getElementsByTagName('a')[0];
}
return null;
}