2016-11-24 31 views
0

我試圖在Jquery的幫助下選擇radiobuttonlist中的一個項目。 我曾與下面的語句嘗試了很久:JQuery中2個語句之間的差異

$('#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]'檢索DOM元素對象,'attr()'不能用於那個,因爲它是一個jQuery方法。 ').prop(「checked」,true)' –

+0

是的,對於那個元素本身,我附加了attr。爲什麼它不起作用? –

+0

你不能用'attr()'方法用dom元素對象 –

回答

0

在您的第一條語句中,您將獲得帶有[0]的DOM元素。該元素沒有名爲attr的方法。

.attr()是一個jQuery方法,只能用於jQuery對象。 $("input")返回一個jQuery對象,而$("input")[0]獲取由jQuery對象匹配的第一個DOM元素(「節點」)。

如果您在第一條語句中刪除[0],它應該可以工作。

+0

因此,'checked'表示直接的javascript語句只能得到結果,而jquery方法不能獲取DOM對象信息。我的發言是正確的嗎? –

+0

@SreekanthReddy no。你可以使用jquery來獲取DOM信息 - 但不能使用'[0]'。 –

+0

如果我們使用索引數組,它只提供了dom元素嗎? –

0

$("selector")[0]得到一個jquery對象(數組),取第一個入口並返回相應的DOM節點。

所以它不再是一個jquery對象,所以你不能調用它的jquery方法。

要解決,你可以刪除[0]部分:

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

或者,如果你只想要一個,使用.first()

$("...").first().attr("checked", true); 
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有超過一千種不同的瀏覽器怪癖被照顧。