答案 0 :(得分:2)
考虑一下你的代码在做什么:
// for each '.question' element
$(".question").each(function() {
// find the 'input' children which are not 'type=hidden'
var children = $(this).children('input[type != "hidden"]');
// get the type
var type = children.attr('type');
}
您有两个question
元素。第一个不包含与子选择器匹配的元素(text
输入不是直接子项,因为它嵌套在h3
中),因此您有一个空数组。
在each
的第一次迭代中,您尝试从空数组中读取attr('type')
,这会给您undefined
。
在each
的第二次迭代中,您试图从包含多个元素的数组中读取attr('type')
。
我认为你要做的事情更像是......
$(".question").each(function(){
$(this).find('input[type != "hidden"]').each(function() {
alert($(this).attr("type"));
});
});
请注意find
通过所有子项进行分析,而不仅仅是children
的直接子项。
答案 1 :(得分:1)
问题是,你试图在“.question”div中找到一个非隐藏的输入元素 - child。
但是你的函数没有拾取grand-child元素,在这种情况下就是那个。这就是为什么你得到“未定义”的回应。
答案 2 :(得分:0)
如果您不想更改HTML,则此代码正常运行:
$(".question").each(function(){
var type = $('input[type != "hidden"]',this).attr("type");
alert(type);
});
// Or
$(".question").each(function(){
var type = $(this).find('input[type != "hidden"]').attr("type");
alert(type);
});
答案 3 :(得分:-1)
这是因为输入type=text
位于h3
:
<h3>The binary language consists of <input type='text' name='response[4][answer]'>digit(s).</h3>
将您的HTML修复为:
<h3>The binary language consists of </h3><input type='text' name='response[4][answer]'>digit(s).