jQuery只序列化div中的元素

Bro*_*ing 107 jquery serialization

我想得到同样的效果,jQuery.serialize()但我想只返回给定的子元素div.

样本结果:

single=Single2&multiple=Multiple&radio=radio1
Run Code Online (Sandbox Code Playgroud)

jit*_*ter 270

没问题.只需使用以下内容.这将与序列化表单完全相同,但使用div的内容.

$('#divId :input').serialize();
Run Code Online (Sandbox Code Playgroud)

查看http://jsbin.com/azodo进行演示(http://jsbin.com/azodo/edit获取代码)

  • 不会`$("#divId").find("select,textarea,input").serialize();`表现更好?我想如果div有很多元素,如上面有几行/列的表,上面的内容可能会变慢. (54认同)
  • 正如其他答案中所列,$('#divId:input').serialize()会更有效率. (3认同)
  • @EaterOfCorpses这不是一个非常准确的测试方法.如果你改变语句的顺序,你会注意到没有任何区别:http://jsfiddle.net/QAKjN/10/.比选择者更多的是在游戏中 (2认同)
  • 显然,这也只是序列化输入,所以大卫默多克的评论是正确的方法. (2认同)
  • jQuery:“因为 :input 是 jQuery 扩展而不是 CSS 规范的一部分,所以使用 :input 的查询无法利用原生 DOM querySelectorAll() 方法提供的性能提升。” 使用 $('[name]') 会更好: document.querySelectorAll('[name]'); (2认同)

Thi*_*PXP 21

如果限制jQuery将要查看的项目,您可以提高代码的速度.

使用selector :input而不是*来实现它.

$('#divId :input').serialize()
Run Code Online (Sandbox Code Playgroud)

这将使您的代码更快,因为项目列表更短.


Zak*_*rki 13

serialize一个中的所有表单元素div.

你可以通过#target-div-id在你的form使用中定位div来做到这一点:

$('#target-div-id').find('select, textarea, input').serialize();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


Luk*_*ski 5

我目前使用的功能:

/**
 * Serializes form or any other element with jQuery.serialize
 * @param el
 */
serialize: function(el) {
    var serialized = $(el).serialize();
    if (!serialized) // not a form
        serialized = $(el).
          find('input[name],select[name],textarea[name]').serialize();
    return serialized;
}
Run Code Online (Sandbox Code Playgroud)

  • 还有 .find('[name]').serialize(); 可用于过滤“可序列化”元素。 (2认同)