1

我有这个代码片段:

$('#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

4 回答 4

4

您将 jQuery 对象作为参数传递给checkDate()而不是 DOM 元素,以获取 DOM 元素,您可以这样做:

$('#selector1,#selector2').change(function(){
    checkDate(this);
});
于 2013-01-14T12:57:55.580 回答
4

当您调用时,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);
于 2013-01-14T13:01:41.450 回答
1

您的代码片段:

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

上面的代码返回一个 HTML DOM Object。如果你使用$(this);你不会得到DOM Object但是一个jQuery object. 所以,你需要修改它,$(this)[0]或者只是this为了让DOM Object你的代码可以正常工作。

代码:

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

或者

$('#selector1,#selector2').change(function(){
    checkDate(this);
});
于 2013-01-14T13:48:46.267 回答
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);
于 2013-06-26T17:20:01.823 回答