对不起,如果这已经发布了,我一直在寻找无济于事..

我只想知道如何在 jquery 中遍历嵌套表单“元素”(元素不仅是严格的表单元素,如输入标签,还包括其他 html 元素)。
目前我有这段代码来做到这一点:

$('#'+arguments[i].formid).children().each(function(){
    var child = $(this);
    alert(child.attr('id'));
    if(child.is(":input")) { alert(child.attr('id'));
     if(child.attr('id')!='') eval("p."+child.attr('id')+"='"+child.attr('value')+"'");
    }

       if(child.is(":textarea")) {
     if(child.attr('id')!='')  eval("p."+child.attr('id')+"='"+child.attr('value')+"'");
    }
   });

当我的表单包含其他元素时,它不起作用:
<form>
    <div id='tabs'>
        <ul>...</ul>
        <div id='tab-1'>
               <input type='text' id='fname' />
               <textarea id='desc' ></textarea>
        </div>
    </div>
</form>

请帮忙...

最佳答案

你可以在递归函数中做到这一点。

function doStuff(child) {
  if(child.is(":input")) {
     ...
  }

  if(child.is(":textarea")) {
    ...
  }
}

function walk(children) {
  if (typeof children == "undefined" || children.size() === 0) {
    return;
  }
  children.each(function(){
    var child = $(this);
    if (child.children().size() > 0) {
      walk(child.children());
    }
    doStuff(child);
  }
}

walk($('#'+arguments[i].formid).children());

编辑 :我刚刚想通了,你想要做什么,你可以把它分解成这个
var p = {};
$('#'+arguments[i].formid + " input[id], #"+arguments[i].formid + " textarea[id]").each(function(){
  var child = $(this);
  p[child.attr("id")] = child.attr("value");
});

您可能应该阅读更多关于 jQuery selectors 的信息。

关于jquery - 遍历 jquery 中的嵌套表单元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1617694/

10-14 22:45
查看更多