Jquery中两个语句之间的差异

时间:2016-11-24 14:04:45

标签: jquery asp.net

我试图在Jquery的帮助下在radiobuttonlist中选择一个项目。 我曾尝试过以下陈述:

$('#ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_RblSendTo input[type="radio"]')[0].attr("checked",true)

但是我得到了选择。经过几分钟测试后,使用以下内容:

$('#ctl00_ctl00_ContentPlaceHolder1_ContentPlaceHolder1_RblSendTo input[type="radio"]')[0].checked = true

有效。 我无法知道我的第一个陈述有什么问题?

3 个答案:

答案 0 :(得分:0)

在第一个语句中,您将获得带有[0]的DOM元素。该元素没有名为attr的方法。

.attr()是一个只能与jQuery对象一起使用的jQuery方法。 $("input")返回一个jQuery对象,而$("input")[0]获取与jQuery对象匹配的第一个DOM元素(“node”)。

如果您在第一个语句中放弃[0],它应该有效。

答案 1 :(得分:0)

$("selector")[0]获取一个jquery对象(数组),获取第一个条目并返回等效的 DOM 节点。

所以它不再是一个jquery对象,所以你不能在它上面调用jquery方法。

要解决此问题,您可以删除[0]部分:

$("...").attr("checked", true);

或者,如果您只想要一个,请使用.first()

$("...").first().attr("checked", true);

答案 2 :(得分:0)

已有评论和答案指出$(...)[0]从jQuery返回的第一个DOM元素解包的事实。

我想补充的是,你不应该如何使用$函数的返回。

如果你想解开DOM节点,你真的应该使用$.get

$('.myclass').get(0) // returns first DOM element from the jquery wrapped node list

如果您只想获得与您的选择器匹配的第一项,请使用伪选择器:

$('.myclass:first') // returns first DOM element wrapped

$('.myclass:eq(n)') // returns Nth DOM element wrapped

另一件值得一提的是,如果您今天决定插入jquery,那么就像使用它一样。

我的意思是,如果您使用jquery选择链接它的元素来附加事件处理程序和访问/更改DOM元素的属性。不要混搭!当您只是使用jQuery进行DOM操作时,您使用的是经过实战测试和跨平台的非常小的API,并且会为您解决许多附带案例。

如果您想使用浏览器本机功能,请完全删除jquery(请查看http://youmightnotneedjquery.com/以获取参考信息),但如果您发现自己需要支持较旧的桌面浏览器,请注意您是独立的比IE9和/或更旧的WinMo / iOS / android设备。当你知道你的客户使用常绿浏览器时,这一切都很好听,但jquery有超过一千种不同的浏览器怪癖被处理。