在 jQuery 中使用 .children 和 .find

Using .children and .find in jQuery

我的页面上有一组控件,我正试图对其进行迭代并确定它们是否具有值。其中一些控件是 控件关联的选项并找到 selected 的选项。我已经尝试过 .children() 和 .find("option:selected"),但它们都不起作用(都在 javascript 中抛出 "undefined" 错误)。我做错了什么?

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 选择器。