我有这段代码:
$('#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")));
});
答案 0 :(得分:4)
您将jQuery对象作为参数传递给checkDate()
而不是DOM元素,以获取您可以执行此操作的DOM元素:
$('#selector1,#selector2').change(function(){
checkDate(this);
});
答案 1 :(得分:3)
当您调用document.getElementById('id')
时,您将获得对DOM节点本身的引用,而调用$('#id')
将返回一个jQuery对象,该对象具有与选择器匹配的DOM节点的引用(如果有一个元素)用给定的id)。使用前者,您可以直接访问其属性(this.id
,this.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);