2014-09-30 75 views
1

這是我在控制檯使用DOM創建選擇FOO:jQuery對象使用的.text().VAL()或.html()時返回未定義

foo 
[<input type=​"text" maxlength=​"70" id=​"authCreateAcctUsernameInput" name=​"userName" autocomplete=​"off" autocapitalize=​"off" autocorrect=​"off">​] 

然後,在一個問題的背面我剛纔問幾分鐘前,我瞭解到,如果我想獲取jQuery對象的textContent,我必須使用.text()

美孚有一些兄弟姐妹:

<fieldset> 
    <label class="userName" for="authCreateAcctUsernameInput">Email Address</label> 
    <input type="text" maxlength="70" id="authCreateAcctUsernameInput" name="userName" autocomplete="off" autocapitalize="off" autocorrect="off"> 
    <span id="authCreateAcctUsernameErrorTxt" class="errorMSG" style="display: block;">Please enter a valid email address.</span> 

爲了從Foo的兄弟姐妹的textContent得到 「電子郵件地址」 我想這:

​​

但是返回TypeError: undefined is not a function

這不 「工作」:返回

$(foo).parent().children()[0] 
    <label class=​"userName" for=​"authCreateAcctUsernameInput">​Email Address​</label>​ 

的元素。那麼爲什麼我不能添加.text()來獲得我需要的內容,即字符串「電子郵件地址」?

+3

當您使用'[0]',你返回一個DOM節點,而不是一個jQuery對象中找到,所以然後嘗試使用'.text()'將失敗。相反,請嘗試'.children()。eq(0).text()'。或者更好,只需'$(foo).prev()'。 – j08691 2014-09-30 02:51:06

+0

感謝您的幫助,這似乎解決了我的問題。我只是最近纔開始撿起JS,而jquery對我來說很新。將研究eq()函數。附:我可以;實際上使用prev(),因爲當整個站點使用這個函數時,元素的順序會有所不同,儘管歡呼! – 2014-09-30 02:57:47

回答

6

它本身不會「返回未定義」,它會引發異常,因爲undefined()無效。

這是因爲.children()[0](相當於.children().get(0))返回一個DOM元素,而不是一個jQuery對象,因此domElement.text評估爲undefined

各種形式找到了「第一個孩子」作爲一個jQuery對象/集可以在How to select first child with jQuery?

相關問題