JQuery find返回undefined

时间:2015-10-16 10:04:33

标签: jquery

有人可以解释为什么我会这样做吗?

在JQuery中,如果我运行

var $('div#form-container').click( function() { 
   label = $(this).find('form label')[0];
   console.log(label);
});

我得到了

<label class=​"control radio">​ 
   " One "
   <input type=​"radio" name=​"profile" value=​"one">
   <span class=​"control-indicator">​</span>​
</label>​

但如果我试着去

var input = label.find('input');

它返回undefined

如何让它返回我的input元素?为什么find无法找到input,因为它是label的后代?

非常感谢!

3 个答案:

答案 0 :(得分:0)

这里你有标签作为dom元素而不是jQuery元素所以不能使用find。

var input = $(label).find('input');

不要在找到标签

的语句中将jQuery元素转换为dom元素
var label = $(this).find('form label');

答案 1 :(得分:0)

你不能使用dom元素来访问其他dom元素,你需要id或class来获得这样的特定元素,

var input = $('.control radio').find('input');

或者

var input = $('label').find('input');
console.log(input);

答案 2 :(得分:0)

为什么找不到输入,因为它是标签的后代?

因为yearselect = Select(browser.find_element_by_css_selector("#dayTab > select.input-small.input-thin")) yearselect.select_by_value("2010") 方法仅适用于jQuery对象,并且您尝试将其绑定在本机dom节点.find()上,所以返回DOM元素而不是jQuery对象。

因此,当您对其应用$(this).find('form label')[0];方法时,将导致错误。

这是一个dom节点:

find()

你必须使用jquery对象:

var label = $(this).find('form label')[0]; // it's a dom node

如果您想获取表单中的第一个标签,则可以使用var input = $(label).find('input'); ,如:

.first(), :first, .eq(0), :eq(0) etc.