NextSibling与类无法正常工作

时间:2014-05-30 20:47:30

标签: javascript soundmanager2

这是我的代码,它没有提醒任何东西,也没有返回任何好的东西:( 第一部分工作正常 但后来它没有:(我似乎无法弄清楚问题是什么..

   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; 将歌曲转发到最后然后当它即将改变到下一个时它不会...... :(这就是这个剧本必须做的事情

1 个答案:

答案 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;
}
相关问题