div 내의 요소 만 직렬화하는 jQuery


111

나는 같은 효과를 얻고 jQuery.serialize()싶지만 주어진의 자식 요소 만 반환하고 싶습니다 div.

샘플 결과 :

single=Single2&multiple=Multiple&radio=radio1

답변:


277

문제 없어요. 다음을 사용하십시오. 이것은 양식 직렬화와 똑같이 작동하지만 대신 div의 콘텐츠를 사용합니다.

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

데모는 https://jsbin.com/xabureladi/1 을 확인 하십시오 ( 코드는 https://jsbin.com/xabureladi/1/edit ).


58
$("#divId").find("select, textarea, input").serialize();더 나은 성능을 기대 하지 않겠습니까 ? div에 여러 행 / 열이있는 테이블과 같이 많은 요소가 있으면 위의 내용이 느려질 수 있다고 생각합니다.
David Murdoch 2011

3
다른 답변에 나열된 것처럼 $ ( '# divId : input'). serialize ()가 더 효율적입니다.
jfountain

2
@EaterOfCorpses는 테스트하는 매우 정확한 방법이 아닙니다. 명령문의 순서를 바꾸면 jsfiddle.net/QAKjN/10 과 같이 실제로 차이가 없음을 알 수 있습니다 . 선택기보다는 놀이에 더있다
론델

2
분명히 이것은 또한 입력을 직렬화하기 때문에 David Murdochs의 의견이 올바른 방법이 될 것입니다.
초음속

2
jQuery : ": input은 jQuery 확장이고 CSS 사양의 일부가 아니기 때문에 : input을 사용하는 쿼리는 기본 DOM querySelectorAll () 메서드에서 제공하는 성능 향상을 활용할 수 없습니다." $ ( '[name]') 사용하는 것이 더 좋습니다 : document.querySelectorAll ( '[name]');
Abdullah Aydın

22

jQuery가 살펴볼 항목을 제한하면 코드 속도를 향상시킬 수 있습니다.

그것을 달성하려면 * 대신 선택기 : input을 사용하십시오 .

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

항목 목록이 더 짧기 때문에 코드가 더 빨라집니다.


15

serialize내 모든 양식 요소 div.

#target-div-id다음을 form사용하여 div를 대상으로 지정할 수 있습니다 .

$('#target-div-id').find('select, textarea, 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 (); '직렬화 가능'요소를 필터링하는 데 사용할 수 있습니다.
Abdullah Aydın

3

이것을 시도하십시오 :

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


6
이것은 div의 선택 요소와 텍스트 영역을 직렬화하지 않습니다
Jeff Walker Code Ranger

그러면 선택 및 텍스트 영역 문제가 수정됩니다. <code> $ ( "# divId"). find ( "select, textarea, input"). 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.