jquery脚本的javascript变量

时间:2014-05-05 11:06:58

标签: javascript jquery loops

我根本不懂Javascript,很遗憾提出这样的问题......

这就是我所拥有的:

$(document).ready(function(){$("#more0").click(function(){$("#update0").slideToggle("normal");});});
$(document).ready(function(){$("#more1").click(function(){$("#update1").slideToggle("normal");});});
$(document).ready(function(){$("#more2").click(function(){$("#update2").slideToggle("normal");});});
$(document).ready(function(){$("#more3").click(function(){$("#update3").slideToggle("normal");});});
$(document).ready(function(){$("#more4").click(function(){$("#update4").slideToggle("normal");});});
$(document).ready(function(){$("#more5").click(function(){$("#update5").slideToggle("normal");});});
$(document).ready(function(){$("#more6").click(function(){$("#update6").slideToggle("normal");});});
$(document).ready(function(){$("#more7").click(function(){$("#update7").slideToggle("normal");});});
$(document).ready(function(){$("#more8").click(function(){$("#update8").slideToggle("normal");});});  
$(document).ready(function(){$("#more9").click(function(){$("#update9").slideToggle("normal");});});
$(document).ready(function(){$("#more10").click(function(){$("#update10").slideToggle("normal");});});
And So On.. Until #more30 and #update30...

所以......现在,我的页面有30行:)

有没有办法减少复杂性?

谢谢!

6 个答案:

答案 0 :(得分:7)

使用 attribute selector ^= [attribute^=value] 选择器用于选择属性值以指定值开头的元素。

$(document).ready(function(){
         $("[id^='more']").click(function(){
                $("#update" + $(this).attr('id').slice(4)).slideToggle("normal");
         });
});

答案 1 :(得分:2)

尝试使用attribute starts with selector选择id以more开头的所有元素,然后使用正则表达式从中提取数值并将其与update连接以形成所需的元素的id并继续,

$(document).ready(function(){
    $("[id^='more']").click(function(){
      var index = $(this).attr('id').match(/\d+/)[0];
      $("#update" + index).slideToggle("normal");
    });
});

答案 2 :(得分:1)

使用 attribute start with selector

$(document).ready(function(){
         $("[id^='more']").click(function(){
                $("[id^='update']").slideToggle("normal");
         });
});

答案 3 :(得分:1)

首先,您可以用一个替换多个就绪事件处理程序注册,例如

$(document).ready(
    $("#more0").click(function(){$("#update0").slideToggle("normal");});
    //...
);

然后,由于您的按钮/链接具有几乎相同的功能,我建议将这些功能合并到单击事件处理程序注册中:

$(document).ready(
    $(".generic-js-hook-class").click(function(){
        var toggleContainer = $(this).data('toggleContainer');
        $(toggleContainer).slideToggle("normal");
    });
);

上述解决方案使用HTML数据属性来存储要切换的元素的信息,并要求您更改相应的HTML,如下所示:

<div class=".generic-js-hook-class" data-toggle-container="#relatedContainer">Click me</div>
<div id="relatedContainer>Toggle me</div>

答案 4 :(得分:1)

我建议你使用Custom Data Attributes (data-*)。这里您可以存储要在数据属性中切换的元素,这些属性可以在后面获取和使用。

JavaScript ,在事件处理程序中,您可以使用.data()来获取这些值。

$(document).ready(function () {
    $(".more").click(function () {
        $($(this).data('slide')).slideToggle("normal");
    });
});

HTML

<div class="more" data-slide="#update1">more1</div>
<div class="more" data-slide="#update2">more2</div>
<div id="update1">update1</div>
<div id="update2">update2</div>

DEMO

答案 5 :(得分:1)

 //select all elements that contain 'more' in their id attribute. 
$('[id^=more]').click(function(){
        //get the actual full id of the clicked element.
        var thisId = $(this).attr("id");
        //get the last 2 characters (the number) from the clicked elem id
        var elemNo= thisId.substr(thisId.length-2);             
         //check if last two chars are actually a number
        if(parseInt(elemNo))
        {
         var updateId = "#update"+elemNo;//combine the "#update" id name with number e.g.5
        }
        else
       {
         //if not, then take only the last char
          elemNo= thisId.substr(thisId.length-1);
          var updateId = "#update"+elemNo;
        }
        //now use the generate id for the slide element and apply toggle. 
        $(updateId).slideToggle("normal");
});