2017-01-23 232 views
0

为了识别用户正在点击的元素,我试图使用事件对象target无法将event.target转换为字符串

$(document).click(function (e) {  
    var str = e.target.toString(); 
    console.log(str); 
    if (str.indexOf("some class or id") >= 0) { 
     //do something 
    }; 
}); 

然而.toString()似乎并没有对e.target一个有用的效果。如果我这样做:

console.log(e.target); 

我得到一个字符串,其中包含DOM元素的开头,例如<div class="myclass">。这是必要的,以检查是否有子的存在,例如myclass“或myid,使用indexOf

我在这里的目的是识别通过观察event.target对其中div的,用户点击” myclass但是,如果我尝试将它做成一个字符串”。

然而indexOf不会在这里工作,因为它会返回‘str是不是一个函数’

,因为这样的:

console.log(e.target.toString()); 

我得到[object HTMLDivElement]。没有我需要的HTML字符串的痕迹。

如何将event.target的输出转换为我可以操纵的字符串?

p.s请注意,这种情况与this one非常相似,关于event.target.id:但所提出的解决方案对我无效。

+0

是否要检查元素的文本内容,或者你只是想看看它是否属于一个特定的类?如果你确实需要这些内容,那么innerHTML,innerText等将是通常的嫌疑犯。 – CBroe

+0

您的实际需求是什么?你想获得被点击的物品的html代码,或者你想要用class或id来标识物品?具体问题。 –

+0

正如我上面写的,“这是为了检查是否存在一个子字符串,例如myclass”或“myid”event.target的输出似乎只是一个元素的开始,无论如何...因为我需要知道用户点击哪个div。我对innerHTML不感兴趣,我只是用这个开始找到我寻找的类或id。 – nico

回答

1

你不需要将它转换为字符串。摆脱.toString()

直接使用其ID属性。

if (e.target.id == 'myid'){ 
    //do something 
}; 

但是如果你想valdate针对选择使用.is()

检查电流匹配的一套对选择,元素或jQuery对象的元素,如果这些元素中的至少一个匹配返回true给出的参数。

if ($(e.target).is('.myclass')){ 
    //do something 
}; 
1

在e.traget中,您具有HTML DOM元素。所以,如果它有一个id,你应该可以做类似

var str = $(e.target).attr("id"); 
if(str.indexOf("id") > -1){ //do something} 
+0

'attr()'是一个jQuery方法,它不可用于DOM节点;你需要'e.target.id','e.target.getAttribute('id')',或者:'$(e.target).attr('id')' –

+0

确实,我会更新答案以反映这一点 – kimy82