Javascript 在mouseDown上获取类或id值

Javascript 在mouseDown上获取类或id值,javascript,jquery,Javascript,Jquery,我想停止默认的右键单击菜单并创建我自己的菜单,但在鼠标按下之前,我需要获取类和id数据,所以在我检查是否右键单击后,打开包含该类名或id的特定数据的菜单 现在的问题是,我得到的唯一id和类值是未定义的,即使我同时有className和id HTML: 编辑:$('body')到$(document),但我也有同样的问题,但是当我试图通过单击document来获取一些数据时,我确实得到了我单击的元素,我需要用右键单击来检查它。我想你可以将$('body')。mousedown替换为: $('.yo

我想停止默认的右键单击菜单并创建我自己的菜单,但在鼠标按下之前,我需要获取类和id数据,所以在我检查是否右键单击后,打开包含该类名或id的特定数据的菜单

现在的问题是,我得到的唯一id和类值是未定义的,即使我同时有className和id

HTML:


编辑:$('body')到$(document),但我也有同样的问题,但是当我试图通过单击document来获取一些数据时,我确实得到了我单击的元素,我需要用右键单击来检查它。

我想你可以将$('body')。mousedown替换为:

$('.youClassName').on('contextmenu', function(e)
{
    var id = $(this).attr('id');
    className = $(this).attr('class');
    //your actions
});

问题是,
$(this)
正在返回body标记,因为您将单击处理程序附加到了body标记。您可以使用
e.target
访问实际单击的内容。请参阅新代码段

$('body')。上下文菜单(函数(e){
var id=$(e.target).attr('id');
var clas=$(e.target).attr('class');
日志(“id:+id+”/class:+clas);
如果(id==“”&clas==“”){
日志(“id:+id+”/class:+clas);
}否则{
如果(clas==“someClassName”){
$(文档).mousemove(函数(事件){
var xPos=event.pageX;
var yPos=event.pageY;
log('xPos:'+xPos+'px;/yPos:'+yPos+'px;');
});
}
}
返回false;
});

一些文字

某些数据发生这种情况的原因是因为您正在处理
正文
事件。在处理程序中,
将引用
正文
。而
body
可能没有
id
class
。您需要处理特定的元素事件。例如:

$('.someClassName').on('contextmenu', function(e)
{
    var id = $(this).attr('id');
    var clas = $(this).attr('class');
    console.log("id: "+id+" / class: "+clas);
    //etc
});

听起来您可能不明白函数中的
是什么。对于事件处理程序,
this
(以及jQuery的
$(this)
)引用处理程序所附加的元素。如果是
$(document).on('mousedown',…)
,函数中的
$(this)
将引用整个文档。幸运的是,您传入的函数有一个对所选元素的引用;目标

香草JS jQuery
target
变量是在文档中鼠标移动的元素。从那里,您可以获得目标元素的属性。注意,目标将是一个DOM节点,您需要将其包装在
$()
中,使其成为一个jQuery对象

香草JS jQuery
我还将
classes
变量设置为列表,而不是字符串。可能不希望假定元素总是有一个类。

var id=$(this.attr('id')这里指的是正文。当我用文档替换时,我有同样的问题,我忘记了指令e.preventDefault();为了防止浏览器上下文菜单,但这不是我需要的,我需要用右键单击任意位置,然后检查我是否单击了具有特定id或类的某个元素。如果我的答案是这样的,请检查代码段。即使我添加了文档,也会遇到同样的问题。我需要点击整个页面,并用click()检查我点击的位置;但我需要右键点击查看是的,这是我需要的。谢谢太好了,很高兴我能够帮助编辑,即使我用文档替换正文,我也会遇到同样的问题,当我尝试用click()做同样的事情时也是如此;它的工作,但我需要它的右键点击。。。
$('.youClassName').on('contextmenu', function(e)
{
    var id = $(this).attr('id');
    className = $(this).attr('class');
    //your actions
});
$('.someClassName').on('contextmenu', function(e)
{
    var id = $(this).attr('id');
    var clas = $(this).attr('class');
    console.log("id: "+id+" / class: "+clas);
    //etc
});
document.onmousedown = function(ev){
    var document = this;
    var target = ev.target;
}
$(document).on('mousedown', function(ev){
    var document = $(this);
    var target = ev.target;
})
document.onmousedown = function(ev){
    var document = this;
    var target = ev.target;
    var id = target.id;
    var classes = target.className.split(' ');
}
$(document).on('mousedown', function(ev){
    var document = $(this);
    var target = $(ev.target); // jQuery wrapped target
    var id = target.attr('id');
    var classes = target.attr('class').split(' ');
})