0

このコードを含む Fiddle はこちらです: http://jsfiddle.net/enp2T/6/

<select id="aList">
    <option value="0">0</option>
    <option value="100">100</option>
    <option value="200">200</option>
    <option value="300">300</option>
</select>

<div id="newListContainer"></div>

$(function() {
    var value = 300;
    var clonedList = $('#aList').clone();    

    var listHtml = clonedList
        .removeAttr('id')
        .val(value)
        .wrap('<div/>')
        .parent()
        .html();

    $('#newListContainer').html(listHtml);       

    //$('#newListContainer>select').val(value);
});

選択した 300 の値が維持されると思っていましたが、listHtml には元のリストの複製が含まれているだけです。私は、オブジェクトを再検索して描画後に値を設定しようとするのが面倒な状況にあります(別の外部ライブラリ関数に渡すと、後でレンダリングが延期され、そのライブラリを直接変更しない限り、完全なコールバックはありません)避けようとしている)。

それで、私はひどく間違ったことをしていますか?癖がありませんか?

明確化: HTML を使用しているライブラリが文字列を想定しているため、HTML を文字列として渡す必要があります。

4

3 に答える 3

3

このためにマークアップを往復する理由はありません。jQuery はシリアライズされない要素の をval設定するselectedIndexので、それが問題だと思います。select

複製された要素を使用するだけです:

var wrappedList = clonedList
    .removeAttr('id')
    .val(value)
    .wrap('<div/>')
    .parent();
// Note: Not doing `.html()` at the end

// html(...) would empty the container and then add the HTML, so
// we empty the container and then append the wrapped, cloned list
$('#newListContainer').empty().append(wrappedList);

更新された作業フィドル

于 2013-09-24T13:32:39.673 に答える
0

このリンクを参照してください。valueに設定することはできません。属性を で項目にselect設定する必要があります。 selectedvalue=300

$(function() {
    var value = 300;
    var clonedList = $('#aList').clone();    
    clonedList.find('option[value="' + value + '"]').attr("selected", true);
    var listHtml = clonedList
        .removeAttr('id')
        //.val(value)
        .wrap('<div/>')
        .parent()
        .html();
    $('#newListContainer').html(listHtml);       

    //$('#newListContainer>select').val(value);
});  

間違いがあります。@TJクラウダーは正しいです。jQueryは関数valueによる選択を設定でき.val(value)ます。リンク

$(function() {
    var value = 300;
    var clonedList = $('#aList').clone();
    var holderCloned = clonedList.removeAttr('id').val(value).wrap('<div/>').parent();
    $('#newListContainer').empty().append(holderCloned);
});
于 2013-09-24T13:36:03.937 に答える