在 jQuery 中使用 .children 和 .find
Using .children and .find in jQuery
我的页面上有一组控件,我正试图对其进行迭代并确定它们是否具有值。其中一些控件是
function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
control.children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != '') {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != '') {
json += control.dataset["fieldname"] + ": ";
json += control.val() + ",";
}
}
}
};
错误出现在上述代码的第 5 行 (control.children.each)。我试过:
control.children.each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {
None 这些选项有效。作为参考,"control" 变量是从通过执行以下操作找到的另一个函数传递的:
$("#search-header").find("select").each( function() {
json = getJsonValue(this, json);
});
您缺少左括号 children
control.children().each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {
为了进一步扩展我的评论,我可以看到您正在传递对象 this
,该对象已分配给函数中的变量 control
。然而,jQuery 不能直接操作这个对象,除非它被转换成一个 jQuery 对象,这可以简单地通过用 jQuery 别名包装它来完成, $(control)
(提示,就像人们在jQuery中使用$(this)
一样,是一回事。
因此,如果您以这种方式修改代码,它应该可以工作:
function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
$(control).children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != '') {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != '') {
json += control.dataset["fieldname"] + ": ";
json += $(control).val() + ",";
}
}
}
};
p/s:附带说明,如果您想从 jQuery 对象访问原始 DOM 节点,只需使用 $(control)[0]
;)
尝试
$(control).find("option:selected").each( function() {
或
$(control).children.each( function() {
你正在从调用者传递 (this) 给你的函数。它没有 jquery 选择器。
我的页面上有一组控件,我正试图对其进行迭代并确定它们是否具有值。其中一些控件是
function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
control.children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != '') {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != '') {
json += control.dataset["fieldname"] + ": ";
json += control.val() + ",";
}
}
}
};
错误出现在上述代码的第 5 行 (control.children.each)。我试过:
control.children.each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {
None 这些选项有效。作为参考,"control" 变量是从通过执行以下操作找到的另一个函数传递的:
$("#search-header").find("select").each( function() {
json = getJsonValue(this, json);
});
您缺少左括号 children
control.children().each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {
为了进一步扩展我的评论,我可以看到您正在传递对象 this
,该对象已分配给函数中的变量 control
。然而,jQuery 不能直接操作这个对象,除非它被转换成一个 jQuery 对象,这可以简单地通过用 jQuery 别名包装它来完成, $(control)
(提示,就像人们在jQuery中使用$(this)
一样,是一回事。
因此,如果您以这种方式修改代码,它应该可以工作:
function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
$(control).children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != '') {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != '') {
json += control.dataset["fieldname"] + ": ";
json += $(control).val() + ",";
}
}
}
};
p/s:附带说明,如果您想从 jQuery 对象访问原始 DOM 节点,只需使用 $(control)[0]
;)
尝试
$(control).find("option:selected").each( function() {
或
$(control).children.each( function() {
你正在从调用者传递 (this) 给你的函数。它没有 jquery 选择器。