【问题标题】:.next() .prev() Traverse Through Multiple <article> elements.next() .prev() 遍历多个 <article> 元素
【发布时间】:2013-07-16 00:40:57
【问题描述】:

我正在制作一个简单的 HTML5 音频播放列表 (audio.js),它会更改为 Wordpress &lt;article ul li&gt; 帖子中的下一首歌曲。所以我在遍历多个&lt;article&gt; 标签并检索.next().prev() 上每个标签的&lt;ul li&gt; 时遇到了一些麻烦。我开始认为使用这些选择器不是最好的解决方案。

<script>
  $(function() { 
    // Setup the player to autoplay the next track
    var a = audiojs.createAll({
      trackEnded: function() {
        var next = $('article ul li').next();
        var title = $('img', this).attr("title");
            $("a.songtitle").text(title);
        if (!next.length) next = $('article ul li').first();
        audio.load($('a', next).attr('data-src'));
        audio.play();
      }
    });

    // Load in the first track
    var audio = a[0];
        first = $('article ul a').attr('data-src');
    $('article ul li').first();
    audio.load(first);

    // Load in a track on click
    $('article ul li').click(function(e) {
      e.preventDefault();
      var title = $('img', this).attr("title");
        $("a.songtitle").text(title);
      audio.load($('a', this).attr('data-src'));
      audio.play();
    });
    // Keyboard shortcuts
    $(document).keydown(function(e) {
      var unicode = e.charCode ? e.charCode : e.keyCode;
         // right arrow
      if (unicode == 39) {
        var next = $('article ul li').next();
        if (!next.length) next = $('ul li').first();
        next.click();
        // back arrow
      } else if (unicode == 37) {
        var title = $('img', this).attr("title");
            $("a.songtitle").text(title);
        var prev = $('article ul li').prev();
        if (!prev.length) prev = $('article ul li').last();
        prev.click();
        // spacebar
      } else if (unicode == 32) {
        audio.playPause();
      }
    })
  });
</script>

如何更改此代码以在多个&lt;article ul li&gt; 标签之间切换以跳到下一首/上一首歌曲?任何帮助将不胜感激!谢谢!

编辑: 这就是我想要做的。但正如您所见,它不会将歌曲跳过到每个 &lt;article ul li&gt; 标签。 Audio.js 自动查找所有&lt;a&gt; 标签并获取data-src 属性以加载歌曲。 http://jsfiddle.net/UkrZx/

【问题讨论】:

  • 为什么不创建一个数组然后迭代它而不是实际的 DOM?
  • 请进一步解释,我完全不会在这里。感谢您的耐心等待。
  • 首先,并不是每个人都熟悉 Wordpress 文章的样子,更不用说您的歌曲列表是如何放置在其中的。那么,用一些有效的 HTML 创建一个 jsFiddle 怎么样?
  • 好的,谢谢你的建议!也更新了我原来的帖子。这就是我想要做的,但正如你所看到的,它们不会在
  • 那么,你是说它只搜索一个&lt;article ui li&gt; 标签?

标签: jquery html audio html5-audio tree-traversal


【解决方案1】:

JSFIDDLE

 $(function() { 
        // Setup the player to autoplay the next track
        var a = audiojs.createAll({
          trackEnded: function() {
            var next = $('article > ul li.playing').next();
            var title = $('img', this).attr("title");
                $("a.songtitle").text(title);
            if (!next.length) next = $('article > ul li').first();
            audio.load($('a', next).attr('data-src'));
            audio.play();
          }
        });

        // Load in the first track
        var audio = a[0];
            first = $('article > ul li a').attr('data-src');
        $('article > ul li').first();
        audio.load(first);

        // Load in a track on click
        $('article > ul li').click(function(e) {
          e.preventDefault();
          var title = $('img', this).attr("title");
            $("a.songtitle").text(title);
          audio.load($('a', this).attr('data-src'));
          audio.play();
        });
        // Keyboard shortcuts
        $(document).keydown(function(e) {
          var unicode = e.charCode ? e.charCode : e.keyCode;
             // right arrow
          if (unicode == 39) {
            var next = $('article > ul li.playing').next();
            if (!next.length) next = $('article > ul li').first();
            next.click();
            // back arrow
          } else if (unicode == 37) {
            var title = $('img', this).attr("title");
                $("a.songtitle").text(title);
            var prev = $('article > ul li.playing').prev();
            if (!prev.length) prev = $('article > ul li').last();
            prev.click();
            // spacebar
          } else if (unicode == 32) {
            audio.playPause();
          }
        })
      });

您似乎正在尝试修改 THIS SCRIPT,我希望我能更多地了解 Wordpress 或 AUDIO.JS 脚本来帮助您。它似乎不想识别父 &lt;li&gt; 之外的任何东西,但我可以让它播放代码中的第二首歌曲。祝你好运,我希望这会有所帮助。

edit 小成就...通过一些编辑(和更新的小提琴),我可以让它播放两首歌曲,但只能使用左箭头。很奇怪,我知道.. 但这是进步。

【讨论】:

  • 没关系,感谢您的尝试。这就是我要修改的确切脚本。你认为这与.next().prev(); 选择器有关吗?我读到这些选择器只遍历集合中的下一个元素。
  • 添加&lt;article &gt; 应该扩展集合以包含article 标记作为最外层元素以及任何包含ul li 的标记,所以没有。我会通读 AUDIO.JS 文档,看看能不能想出点什么。
  • 感谢您对 DevlishOne 的持续帮助。请参阅我发布的答案。也许你可以帮我处理一下我的next question
【解决方案2】:

不知道为什么它不能识别下一个/上一个 &lt;article&gt; 元素,但我更改了原始的 Wordpress 帖子内容,只输出 &lt;li&gt; 元素之间的帖子。很奇怪,但至少现在可以了。

我的代码现在是这样的:http://jsfiddle.net/HxVaj/2/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    相关资源
    最近更新 更多