找到特定的锚标记并替换数据属性onclick

时间:2013-06-05 14:26:00

标签: javascript jquery function custom-data-attribute

我有以下页面结构

<div class="main">
   <article class="article">
   <!-- ... -->
      <div class="article-footer>
         <ul>
            <li><a href="#" class="article-play" data-play="3" data-src="http://..."></a></li>
            <li>...</li>
            <!-- ... -->
         </ul>
      </div>
   </article>

   <article class="article playing"> <!-- Notice Additional Class .playing
   <!-- ... -->
      <div class="article-footer>
         <ul>
            <li><a href="#" class="article-play" data-play="3" data-src="http://..."></a></li>
            <li>...</li>
            <!-- ... -->
         </ul>
      </div>
   </article>

   <!-- ... -->

</div>

所以我想做的是,在这个点击功能中:

$(".audiojs .play-pause").click(function() {

  <!-- Code Here -->            
})

单击替换锚标记内的数据属性,其中包含.article-play.playingdata-play="3"的文章内的文章data-pause="4",但是在某种程度上它会检查如果有data-play="3"而不是点击,请将其替换为data-pause="4",如果有data-pause="4",则将其替换为data-play="3"

4 个答案:

答案 0 :(得分:1)

$(".audiojs .play-pause").click(function() {
    var element = $('.playing .article-play')
    var play = element.attr('data-play')
    var pause = element.attr('data-pause')
    if(play == '3'){
        element.removeAttr('data-play');
        element.attr("data-pause",'3');
    }else if(pause == '4'){
        element.removeAttr('data-pause');
        element.attr("data-play",'4');
    }
});

答案 1 :(得分:0)

我认为以下内容应该有效(未经测试):

var dataPlay = $(".playing a.article-play").data("play");
var dataPause = $(".playing a.article-play").data("pause");

if (dataPlay == "3") {
    $(".playing a.article-play").removeAttr("data-play").attr("data-pause", "4");
} else if (dataPause == "4") {
    $(".playing a.article-play").removeAttr("data-pause").attr("data-play", "3");
}

答案 2 :(得分:0)

var a = $("article.playing a.article-play")
a.each(function(){
    var playAttr = $(this).attr("data-play")
    var pauseAttr = $(this).attr("data-pause")
    if(playAttr){
        if(playAttr == "4"){
            $(this).removeAttr("data-play");
            $(this).data("pause",3);
        }
    }
    if(pauseAttr){
        if(pauseAttr == "3"){
            $(this).removeAttr("data-pause");
            $(this).data("play",4);
        }
    }
});

答案 3 :(得分:0)

我认为您可以将处理pause的方法与处理play

的方法分开

简化HTML

<div class="playing">
    <div id="output"></div> 

    <a href="#" class="article-play" data-play="4">click</a>

</div>

<强> JS

$(".playing").on("click", ".article-play[data-pause]", function () {
    $(this).removeAttr("data-pause");
    $(this).attr("data-play", 4);

    $("#output").text("playing 4");
});

$(".playing").on("click", ".article-play[data-play]", function () {
    $(this).removeAttr("data-play");
    $(this).attr("data-pause", 3);

    $("#output").text("pausing 3");
});

jsFiddle

此答案基于我在尝试实施此解决方案时收到the question I asked的答案