2014-09-30 73 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?

相关问题