用jquery函数替换document.getElementById?

时间:2013-01-14 12:53:43

标签: javascript jquery html

我有这段代码:

$('#selector1,#selector2').change(function(){
    checkDate(document.getElementById($(this).attr("id")));
});

以上工作正常,但我想使用jQuery的$代替document.getElementById。所以,我尝试了这个,但它给了我一个javascript错误:TypeError: valueToTest is undefined

$('#selector1,#selector2').change(function(){
    checkDate($("#" + $(this).attr("id")));
});

4 个答案:

答案 0 :(得分:4)

您将jQuery对象作为参数传递给checkDate()而不是DOM元素,以获取您可以执行此操作的DOM元素:

$('#selector1,#selector2').change(function(){
    checkDate(this);
});

答案 1 :(得分:3)

当您调用document.getElementById('id')时,您将获得对DOM节点本身的引用,而调用$('#id')将返回一个jQuery对象,该对象具有与选择器匹配的DOM节点的引用(如果有一个元素)用给定的id)。使用前者,您可以直接访问其属性(this.idthis.value等),而第二个则需要使用jQuery函数(.prop().val()等)。

如果您想传递jQuery对象,您可能还需要对checkDate函数进行更改,以避免在您直接访问属性时出现错误,并且jQuery对象上不再存在这些属性。

据说,这一行:

checkDate(document.getElementById($(this).attr("id")));

远比它需要的复杂得多。您已经获得了对该元素的引用 - this - 因此访问其id并将其传递给document.getElementById()以获得对它的另一个引用毫无意义。你可以这样做:

checkDate(this);

答案 2 :(得分:1)

您的代码段:

document.getElementById($(this).attr("id"))

上面的代码返回HTML DOM Object。如果您使用$(this);,则不会获得DOM Object,而是jQuery object。因此,您需要像$(this)[0]this一样对其进行修改,以获得DOM Object,您的代码将完美无缺。

<强> CODE:

$('#selector1,#selector2').change(function(){
    checkDate($(this)[0]);
});

OR

$('#selector1,#selector2').change(function(){
    checkDate(this);
});

答案 3 :(得分:0)

document.getElementById检索(一个)DOM节点,而jQuery返回一个实际上是DOM节点数组的jQuery对象。因此,要替换

var element = document.getElementById($(this).attr("id"));

使用jquery,执行此操作

var element = $($(this).attr("id"))[0];
// or
var element = $($(this).attr("id")).get(0);