我试图在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
有效。 我无法知道我的第一个陈述有什么问题?
答案 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有超过一千种不同的浏览器怪癖被处理。