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

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

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

single=Single2&multiple=Multiple&radio=radio1

Ответ 1

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

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

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

Ответ 2

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

Используйте селектор : ввод вместо *, чтобы достичь этого.

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

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

Ответ 3

serialize все элементы формы в пределах div.

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

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

Надеюсь, что это поможет.

Ответ 4

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

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

Ответ 5

Попробуйте также:

$( '# DIVID'). Найти ( 'вход'). Сериализации()

Ответ 6

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

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>

Ответ 7

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

Ответ 8

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

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

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