每个函数的jQuery索引

时间:2011-08-18 15:09:58

标签: jquery indexing

我很好奇为什么我需要这个索引

$(document).ready(function() {
        $(".divToggle").each(function(index){
            var buttonId = $(this)[0].attributes["id"].value.toString();
            var idParts = buttonId.split('_');
            var uniquePart = idParts[0] + "_" + idParts[1] + "_" + "divContentPanel";             
            $(this).click(function() {
                 $("#" + uniquePart).toggle("slow");
            });            
        });
    });

为什么我需要“var buttonId = $(this)[0]中的”[0]“......如果没有它,我得到一个属性[”id“]为空错误..

6 个答案:

答案 0 :(得分:4)

改为使用

var buttonId = this.id;

或jQuery方式

var buttonId = $(this).attr("id");

答案 1 :(得分:2)

使用$(this)你仍然在jquery模型中,获取id的正确方法是.attr(“id”)

写$(this)[0]让你重新回到你写的那个DOM模型。

答案 2 :(得分:2)

$(this)[0]

正在做两件事 -

  1. 获取匹配集中的第一个元素,因为在这种情况下索引逐个循环一组结果索引可能是多余的
  2. 返回“普通”JavaScript DOM对象而不是jQuery包装对象
  3. 查看您的代码我相信您可以通过这样做获得相同的结果 -

    var buttonId = this.id;
    

答案 3 :(得分:1)

尝试

 var buttonId = $(this).attr("id");

答案 4 :(得分:1)

从技术上讲,只需稍加修改代码就不需要它。 jQuery选择器会发生什么,它们只是数组中的一堆元素引用。所以而不是

<div id ="myelement"></div>

你得到了

[<div id ="myelement"></div>]

使用$(this)this放入数组中,并允许它与jQuery函数一起使用。如果您不使用jQuery函数,请使用this。所以你的代码将成为

var buttonId = this.attributes["id"].value.toString();

答案 5 :(得分:1)

$(".divToggle").each(function(index, element){
    var buttonId = element.id,
        idParts = buttonId.split('_'),
        uniquePart = idParts[0] + "_" + idParts[1] + "_" + "divContentPanel";

    $(element).click(function() {
         $("#" + uniquePart).toggle("slow");
    });            
});