jQuery仅序列化div中的元素


111

我想获得与相同的效果,jQuery.serialize()但是我只想返回给定子元素的子元素div

样本结果:

single=Single2&multiple=Multiple&radio=radio1

Answers:


277

没问题。只需使用以下内容。这将与序列化表单完全一样,只是使用div的内容。

$('#divId :input').serialize();

检查https://jsbin.com/xabureladi/1的示范(https://jsbin.com/xabureladi/1/edit的代码)


58
不会带来$("#divId").find("select, textarea, input").serialize();更好的性能吗?我想如果div有很多元素(例如带有多个行/列的表),则上述操作可能会变慢。
大卫·默多克

3
如在其他答案中列出的那样,$('#divId:input')。serialize()会更高效。
jfountain

2
@EaterOfCorpses并不是一种非常准确的测试方法。如果切换语句的顺序,您会发现实际上并没有什么区别:jsfiddle.net/QAKjN/10。除了选择器之外,还有更多其他游戏
Rondel

2
显然,这也只会序列化输入,因此David Murdochs的评论将是正确的方法。
superphonic

2
jQuery:“因为:input是jQuery扩展,而不是CSS规范的一部分,所以使用:input的查询无法利用本机DOM querySelectorAll()方法提供的性能提升。” 使用$('[name]')会更好:document.querySelectorAll('[name]');
阿卜杜拉·艾登

22

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

使用选择器:input而不是*来实现它。

$('#divId :input').serialize()

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



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;
}

2
还.find('[[name]')。serialize(); 可用于过滤“可序列化”元素。
阿卜杜拉·艾登

3

也试试这个:

$('#divId')。find('input')。serialize()


6
这不会在div中序列化选择元素和文本区域
Jeff Walker Code Ranger

这将纠正选择和文本区域问题:<code> $(“#divId”)。find(“选择,文本区域,输入”).serialize(); <// code>
TroySteven

3

那我的解决方案呢:

function serializeDiv( $div, serialize_method )
{
    // Accepts 'serialize', 'serializeArray'; Implicit 'serialize'
    serialize_method = serialize_method || 'serialize';

    // Unique selector for wrapper forms
    var inner_wrapper_class = 'any_unique_class_for_wrapped_content';

    // Wrap content with a form
    $div.wrapInner( "<form class='"+inner_wrapper_class+"'></form>" );

    // Serialize inputs
    var result = $('.'+inner_wrapper_class, $div)[serialize_method]();

    // Eliminate newly created form
    $('.script_wrap_inner_div_form', $div).contents().unwrap();

    // Return result
    return result;
}

/* USE: */

// For: $('#div').serialize()
serializeDiv($('#div')); /* or */ serializeDiv($('#div'), 'serialize');

// For: $('#div').serializeArray()
serializeDiv($('#div'), 'serializeArray');


0

如果这些元素具有通用的类名,则也可以使用以下名称:

$('#your_div .your_classname').serialize()

这样,您可以避免选择按钮,而将使用jQuery选择器进行选择:input。虽然也可以通过使用$('#your_div :input:not(:button)').serialize();


0
$('#divId > input, #divId > select, #divId > textarea').serialize();

1
如果使用逗号,则需要ID在每个选择器中指定,例如:$('#divId > input, #divId > select, #divId > textarea');; 另外,>它所指的符号是直接子元素...在这种情况下非常不正常,或者至少非常限制性。
gmo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.