2017-12-30 57 views
0

選択した要素を他の要素に置き換える簡単な方法はありますか?jQuery:要素を他の要素に置き換えますか?

私はreplaceWithと考えていましたが、実際にはすべてのオカレンスが提供された要素で置き換えられました。だから、私の場合は、実際には要素を複製します(すべてのオカレンスのために)。

は、この例を考えてみましょう:

var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>' 
 
$('.discount_select option:not(:first)').replaceWith(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select class="discount_select"> 
 
    <option value="0"></option> 
 
    <option value="4">45% Discount</option> 
 
    <option value="5">10% Discount</option> 
 
</select>

結果は、新たなオプションが重複しているということです。私は2つの15%と2つの18%オプションを取得します。しかし、私は選択されたオプションを指定されたオプションに置き換える必要があります(オプションごとにこれを行うのではなく)。

あなたはここでそれを見ることができます:https://jsfiddle.net/6on7mzqw/

P.S.を私はそれが最初に不要な要素を削除し、新しい要素を追加することは可能だと思いますが、多分簡単な方法がありますか?

+0

これは、セレクタが2つのオプションをキャッチし、両方を完全なhtmlで置き換えるためです。特定のセレクターを作ってみてください。 – Marnix

+0

@マルニーン私はそれを知っている、私は質問で説明した。もっと具体的にするにはどうすればいいですか? – Andrius

+0

新しいソースを1つのhtml文字列形式にしているので、古いオプションを削除して、新しいものを1つに入れて行くことができます。データ構造を変更するオプションはありますか? – dferenc

答えて

0

最初のものが選択される前にHTMLから新しいコンテンツを入れます。鶏は元の選択に戻り、それらを削除します。

var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>' 
 
$('.discount_select option:not(:first)') 
 
.first().before(html).end().remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select class="discount_select"> 
 
    <option value="0"></option> 
 
    <option value="4">45% Discount</option> 
 
    <option value="5">10% Discount</option> 
 
</select>

-1

あなたは子セレクタ使用することができ、あなたの問題を解決するには、次のような順序 によって は、特定の要素を選択するために、n番目の子(n)をこの

var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>' 
 

 
$('.discount_select option:nth-child(2)').replaceWith(html);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select class="discount_select"> 
 
    <option value="0"></option> 
 
    <option value="4">45% Discount</option> 
 
    <option value="5">10% Discount</option> 
 
</select>

のための多くのソリューションがありますあなたの問題とそれらのうちの1つ

+0

これは要素を置き換えません。あなたは10%を残しました。 – Andrius

+0

私はあなたが2つの要素を置き換えることを知っていませんよ、私はあなたのために私の答えを編集します –

+0

配列としてhtml変数を作る試合は何ですか? –

1

この特定のケースを扱うjQueryの中に方法がないように見えますので、我々はちょうど新しい要素を削除して追加することができます。

var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>' 

$('.discount_select option:not(:first)').remove(); 
$('.discount_select option:first').after(html); 
0

不要なオプションを削除し、新しいオプションを一度に追加する方がよい場合があります。以下の解決策はこれを1回の操作で行います。つまり、DOMの書き換えは1回だけです。これは速度面では優れた方法です。

var html = '<option value="8">15% Discount</option><option value="9">18% Discount</option>'; 
$('.discount_select').html(
    $('.discount_select option').first().add(html) 
); 
関連する問題