从JQuery对象获取Selector

时间:2012-12-03 05:57:13

标签: javascript jquery jquery-selectors

例如,这将给我:

 console.log($(".smartgridview-normal").selector)
 //result is  '.smartgridview-normal'.  

enter image description here

我的代码是:

    $( '.smartgridview-normal th' ).live( 'dblclick', function () {
        var optimalWidth = parseFloat( $( this ).attr( 'data-width' ) );
        console.log( $(this).selector );// At this point I need the selector
        $(this).addClass('selected');
    } );

我的日志给了我一个空字符串。 “this”对象没有选择器。有没有办法得到'this'所指向的元素的选择器?

感谢您的时间。

5 个答案:

答案 0 :(得分:2)

哦,我知道你的问题在哪里。 $(this)不是使用选择器构造的,而是通过直接包装DOM元素构造的,因此它不会在任何地方携带它。你可以通过$('.smartgridview-normal th').selector明显地获得原始选择器;但$('.smartgridview-normal th')$(this)之间存在很大差异。

答案 1 :(得分:2)

正如Amadan所说,点击处理程序this内部是指元素,而不是jQuery对象

它并不完美,但您可以缓存jQuery对象

var elements = $("#mySelector")
$elements.on("dblclick", function(event){
    console.log($elements.selector);
});​

Fiddle进行测试

答案 2 :(得分:1)

要详细说明我的评论,如果元素具有id,"#"+this.id是您可以期望的最佳选择。如果没有,您所拥有的唯一信息是该元素属于您的原始选择'.smartgridview-normal th'

您始终可以在代码中自行添加ID(例如,基于当前日期和时间的唯一ID)。

答案 3 :(得分:0)

也许先将它设置为变量?

var sel = "answer";
$("#"+sel).on("dblclick", function(event){
   console.log("Current selector is "+sel);
});​

答案 4 :(得分:-1)

尝试使用nodeName代替selector

var selector = $(this)[0].nodeName;

或者,

var selector = this.nodeName;