我正在迭代某些元素,我发现document.getElementById("id")
有效,但$("#id")
没有。为什么呢?
编辑:我想发布代码不会有什么坏处吗?
function myFunction() {
var token, tokens, id, input;
$("[id^=\"some_id_\"]").each(function() {
tokens = this.id.split("_");
id = tokens[tokens.length - 1];
input = document.getElementById("some_form_element_" + id); //WORKS
//input = $("#some_form_element_" + id); //DOESNT, alerts undefined
alert(input.value);
});
}
答案 0 :(得分:6)
您正在警告input.value
,jQuery包装器对象上未定义value
。
document.getElementById
将直接返回DOM元素。但是$()
返回一个包装DOM元素的jQuery对象。您可以使用$('#someId').attr('value');
或$('#someId').val()
这是一个演示:http://jsfiddle.net/CK2xr/
的小提琴答案 1 :(得分:2)
你可能就是这样:
当“name”属性与您正在寻找的“id”匹配时,Internet Explorer(至少是旧版本)会返回元素,这些浏览器会延续这些浏览器中存在的更为荒谬的API特性。
编辑 - 澄清:Internet Explorer的document.getElementById()
函数将匹配“id”属性或“name”属性,并返回第一个它在DOM中找到的一个。 jQuery API试图实际满足“#”选择器语法的语义,即使在IE中,它也只匹配“id”属性。