2016-12-22 33 views
9

powiedzmy mam tej zmiennej html, które zawierają te wybierz opcje:Jak programowo wybrać opcję wewnątrz zmiennej za pomocą jQuery

var html = '<select>'+ 
      '<option value="10">10</option>'+ 
      '<option value="20">20</option>'+ 
      '</select>'; 

Jak programowo wybrać opcję, która jest wewnątrz zmiennej html tak kiedy dołączyć je do czegoś, na przykład

$(this).children('div').append(html); 

stanie się on tak:

<div> <!-- children div of the current scope --> 
    <select> 
    <option value="10" selected>10</option> 
    <option value="20">20</option> 
    </select> 
</div> 

Jak to jest możliwe?


edit: zmienna zawartość jest generowana z odległych miejsc i muszę zmienić wartość lokalnie zanim jest on dołączany do div. Stąd pytanie.

edytuj 2: przepraszam za zamieszanie, pytanie zostało zaktualizowane moją rzeczywistą sytuacją.

+0

Można je dołączyć, a następnie zaktualizować wybraną właściwość później. – Terry

+0

@Terry to część, której utknąłem do teraz. Umysł, aby podzielić się pewną odpowiedzią? (proszę) * wink-wink * –

+0

zrobiłeś tę pracę? var html = '' – Deep

Odpowiedz

7

Można rzucić HTML do elementu jQuery i wybierz wartość w indeksie 0. Następnie można dodać go do DOM.

Oto prosta wtyczka jQuery do wybrania opcji według indeksu.

(function($) { 
 
    $.fn.selectOptionByIndex = function(index) { 
 
    this.find('option:eq(' + index + ')').prop('selected', true); 
 
    return this; 
 
    }; 
 
    $.fn.selectOptionByValue = function(value) { 
 
    return this.val(value); 
 
    }; 
 
    $.fn.selectOptionByText = function(text) { 
 
    this.find('option').each(function() { 
 
     $(this).attr('selected', $(this).text() == text);         
 
    }); 
 
    return this; 
 
    }; 
 
})(jQuery); 
 

 
var $html = $([ 
 
    '<select>', 
 
    '<option value="10">10</option>', 
 
    '<option value="20">20</option>', 
 
    '</select>' 
 
].join('')); 
 

 
$('#select-handle').append($html.selectOptionByIndex(0)); 
 
// or 
 
$html.selectOptionByValue(10); 
 
// or 
 
$html.selectOptionByText('10');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="select-handle"></div>

+2

splendid. żadnych innych słów do powiedzenia. $ ('# select-handle'). append ($ html.selectOptionByIndex (0)); <<<< tego właśnie szukam. dziękuję –

+0

@ Mr.Polywhirl fajne rozwiązanie ... dlatego tak bardzo lubię SO - zawsze daje ci coś do nauki :) – kukkuz

+0

Po prostu z ciekawości, czy to stwierdzenie 'this.find ('option: eq (' + index + ')'). prop ("selected", true); "kończy się wykonywanie wielu wybranych opcji? – Jeffrey04

3

selected = „wybrany” będzie działać

var html = '<select>'+ 
      '<option value="10">10</option>'+ 
      '<option value="20" selected="selected">20</option>'+ 
      '</select>'; 

      $('#select_handle').append(html); 
+0

Zmienna html całkowicie wygenerowany przez zdalną lokalizację, a jedynym wyborem, jaki mam, jest zmodyfikowanie zawartości zmiennej. –

+0

$ ("# select_handle option [value = 10]"). Attr ("wybrany", "wybrany"); pomoże – Payal2299

+0

FYI https://jsfiddle.net/h15mohaf/10/ – Payal2299

3

domyślnie pierwszy opcję zostanie wybrany - jeśli chcesz zrobić na inny zestaw to tak przy użyciu indeksujak tylko select jest dołączone:

$('#select_handle option:eq(1)').prop('selected', true) 

(to wybiera druga opcja)

Zobacz demo poniżej:

var html = '<select>'+ 
 
      '<option value="10">10</option>'+ 
 
      '<option value="20">20</option>'+ 
 
      '</select>'; 
 
$('#select_handle').append(html); 
 
$('#select_handle option:eq(1)').prop('selected', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="select_handle"></div>

+0

czy mogę wybrać opcję przed dodaniem selectboksa do # select_handle? dzięki –

+1

@FarizLuqman zwykle czekam na DOM, aby zaktualizować i użyć czegoś takiego jak 'ng-init' (ponieważ używam kątowego), ale * Mr. Odpowiedź Polywhirl * jest dla mnie nowością ... :) – kukkuz

+1

w normalnych czasach, zrobię to również za pomocą rozwiązań dostarczonych mi przez kolegów z koledżu (jeszcze raz przepraszam za nieusuwanie pytania), ale zaktualizuję element * przed * DOM jest aktualizowany, może to wymagać pewnego zaawansowanego poziomu zrozumienia, a więc nowej lekcji, której wszyscy mogą się nauczyć :) –

3

Można to zrobić w jQuery użyciu funkcji .attr() i nth pseudo-selektor.

tak:

$("option:nth-child(1)").attr("selected", ""); 

Nadzieję, że to pomaga!:-)

2

po append, spróbuj $('#select_handle select').val("10"); lub 20 lub niezależnie od wartości chcesz wybrać

4

Można spróbować po prostu ustawiając wartość z listy rozwijanej do jednego chcesz „wybierz” - jak $("#select_handle select").val(a_value);

Na przykład, jeśli a_value ma wartość 30, doda potrzebny kod HTML do węzła DOM. Byłoby to moje zdanie:

$(function() { 
 
    var html = '<select>' + 
 
     '<option value="10">10</option>' + 
 
     '<option value="20">20</option>' + 
 
     '<option value="30">30</option>' + 
 
     '<option value="40">40</option>' + 
 
     '<option value="50">50</option>' + 
 
    '</select>'; 
 

 
    // set a value; must match a 'value' from the select or it will be ignored 
 
    var a_value = 30; 
 

 
    // append select HTML 
 
    $('#select_handle').append(html); 
 

 
    // set a value; must match a 'value' from the select or it will be ignored 
 
    $("#select_handle select").val(a_value); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<h2>select added below</h2> 
 
<div id="select_handle"> 
 
</div>