Javascript 为什么.index()在此语句中解析为数字,而.parent().index()解析为字符串?

Javascript 为什么.index()在此语句中解析为数字,而.parent().index()解析为字符串?,javascript,jquery,Javascript,Jquery,这是代码,它引用了TD,“农田”是表的id: $("#farmland td").click(function(){ $("#console").html($(this).index() + 1 + ", " + $(this).parent().index() + 1); }); 当我点击TD时,我会得到1,01或1,11或1,21等。。。.index()的数字正确相加,但对于.parent().index()的数字是在1后面加上的,就像它是一个字符串一样 我觉得这很

这是代码,它引用了TD,“农田”是表的id:

$("#farmland td").click(function(){
        $("#console").html($(this).index() + 1 + ", " + $(this).parent().index() + 1);
    });
当我点击TD时,我会得到1,01或1,11或1,21等。。。.index()的数字正确相加,但对于.parent().index()的数字是在1后面加上的,就像它是一个字符串一样

我觉得这很奇怪,因为我希望它要么以一种方式行动,要么以另一种方式行动,而不是两种不同的方式


我的第一个猜测可能是,这是因为我的
+”,“+
正在将其转换为字符串?

这是因为JavaScript看到第一个
index()
调用返回一个数字,它将数字1添加到该数字,然后将其与字符串组合,因此它将数字连接到字符串

除此之外,无论字符串是什么,请使用括号将数字与字符串分隔开:

$("#farmland td").click(function(){
        $("#console").html(($(this).index() + 1) + ", " + ($(this).parent().index() + 1));
    });

每当你想强制对一个变量进行数字求值时,你可以将它转换为1*你的变量,它将被解释为一个数字,这称为从左到右的关联性。

当有更好的工具可用时,连接有点难看。那么:

$("#farmland td").click(function(){
    $("#console").html([$(this).index() + 1, $(this).parent().index() + 1].join(", "));
});

您可以使用
this.cellIndex
而不是
$(this).parent().index()
,您可以使用
this.parentNode.rowIndex
而不是
$(this).parent().index()
。直接属性访问比创建jQuery对象,然后调用方法快得多,效率也高得多。@RobG谢谢,这些方法都奏效了,为什么我能用“this”代替“$(this)”呢?也很奇怪,因为$(this).parentNode.rowIndex失败了,但是this.parentNode.rowIndex成功了。$函数创建了一个jQuery对象。在侦听器中,这通常设置为调用侦听器的元素。因此,
$(this)
使用一个元素创建一个jQuery对象。要引用元素,您需要执行
$(this)[0]
,这只是访问
this
(即元素)的一种低效方式<代码>$(此).rowIndex正在尝试访问jQuery对象的rowIndex属性-它没有,而是有一个索引方法(包装DOM对象时会发生这种情况,简单的属性访问会变成一个函数调用)。@RobG谢谢,您知道有一个好的参考可以向我展示这个(非jQuery)对象上所有可用的属性和方法吗?HTML DOM元素的属性(或多或少)反映了等价的属性。您还需要阅读和规范,以及规范(注意,它不是一个标准,但确实尝试使用标准中没有的常见功能)。