jQuery для сериализации только элементов в div

Я хотел бы получить тот же эффект, что и jQuery.serialize() но я хотел бы вернуть только дочерние элементы данного div.

пример результата :

single=Single2&multiple=Multiple&radio=radio1

8 ответов


нет проблем. Просто используйте следующее. Это будет вести себя точно так же, как сериализация формы, но вместо этого использовать содержимое div.

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

проверить http://jsbin.com/azodo для демонстрации (http://jsbin.com/azodo/edit для кода)


вы можете улучшить скорость вашего кода, если вы ограничите элементы, на которые будет смотреть jQuery.

используйте переключатель : input вместо * для ее достижения.

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

это сделает ваш код быстрее, потому что список элементов короче.


serialize все элементы формы в a div.

вы можете сделать это, нацелившись на div #target-div-id внутри form использование :

$('#target-div-id').find('select, textarea, input').serialize();

надеюсь, что это помогает.


функция, которую я использую в настоящее время:

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

попробуйте этот:

$('#divId').найти('вход').serialize ()


как насчет моего решения:

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');

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: */

var r = serializeDiv($('#div')); /* or serializeDiv($('#div'), 'serialize'); */
console.log("For: $('#div').serialize()");
console.log(r);

var r = serializeDiv($('#div'), 'serializeArray');
console.log("For: $('#div').serializeArray()");
console.log(r);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div">
  <input name="input1" value="input1_value">
  <textarea name="textarea1">textarea_value</textarea>
</div>

Если эти элементы имеют общее название класса, можно также использовать это:

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

таким образом, вы можете избежать выбора кнопок, которые будут выбраны с помощью селектора jQuery :input. Хотя этого также можно избежать, используя $('#your_div :input:not(:button)').serialize();


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