如果函数中的'this'是特定类

时间:2014-04-26 08:25:08

标签: javascript jquery this

我有一个委托,在使用他们的id或类点击某些DOM元素时调用,我在函数中使用'this',但我怎样才能找出'this'实际上是哪个类或id?

这是我的代码:

$(document).delegate("#lg-menu li, #xs-menu li, .list-item", "click", function(e) { 
    a = $(this).attr("alpha");
    b = $(this).attr("bravo");
    c = $(this).attr("charlie");
    d = parseInt($(this).attr("delta"));
}

3 个答案:

答案 0 :(得分:1)

要获取此ID,您可以读取dom元素的id属性,如

var id = this.id;

要检查是否有特定类,请使用{/ 3}}

var hasActive = $(this).hasClass('active')

答案 1 :(得分:1)

this是指触发事件的DOM对象,因此您可以使用DOM方法或jQuery方法来检查它或其父项:

$(document).delegate("#lg-menu li, #xs-menu li, .list-item", "click", function(e) { 
    var item = $(this);
    // see which selector the item matches
    if (item.is("#lg-menu li") {
        // must be #lg-menu li

    } else if (item.is("#xs-menu li") {
        // must be #xs-menu li

    } else {
        // must be .list-item

    }
}

.is()为您完成整个选择器评估。您还可以询问元素的各个属性,例如:

item.hasClass(".list-item")               // does the item have a .list-item classname
item.parents("#lg-menu").length !== 0     // does the item have a #lg-menu parent
item.parents("#xs-menu").length !== 0     // does the item have a #xs-menu parent
this.tagName === "LI"                     // is the item an <li> tag

但是,如果你真的需要知道它是哪个项目,那么你可能应该为每个项目使用单独的事件处理程序,并保存每次尝试找出它的工作。

$(document).delegate("#lg-menu li", "click", function(e) { 
    // code here
});

$(document).delegate("#xs-menu li", "click", function(e) { 
    // code here
});

$(document).delegate(".list-item", "click", function(e) { 
    // code here
});

答案 2 :(得分:0)

您可以记录this对象并找出其中包含的字段:

$(document).delegate("#lg-menu li, #xs-menu li, .list-item", "click", function(e) { 
   console.log(this);
   ...
}

您还可以使用this方法为功能手动设置bind(thisArg) described here