2012-08-14 19 views
9

Czy ktoś może mi powiedzieć, dlaczego działa to w starszych wersjach jQuery (np. 1.4.2), ale jeśli przełączysz się na nowszą wersję, np. (1.6 +) przestaje działać?znajdź opcję zaznaczenia według tekstu

http://jsfiddle.net/nmvf6/1194/

$(function(){ 
    $('#my_button').click(function(){ 
     var unitName = "Unit2"; 
     $('.assUnit').find('option[text="'+unitName+'"]').remove(); 
    }); 

}); 

Sprawdziłem wyjście błędu w konsoli dla późniejszych wersjach, a błąd wydaje się pojawić na stronie obciążenia, zanim Mam nawet tak daleko, jak to ładuje się mój skrypt i jest w stanie kliknąć przycisk ..

Kiedy zmienić wersję na 1.8.0 dla przykładu i uruchomić stronę, this error pojawia się w mojej konsoli skryptów Opera:

http://s15.postimage.org/5yhodvirt/ess.png

który wydaje się być w "mootools" file..but nie wybrać Mootools wybrałem jQuery 1.8.0

:/

dzięki.

+5

haha, powiedziałeś "assUnit". – RubeOnRails

Odpowiedz

13

Używasz Attribute Equals selektor, który wybiera elementy, które mają określony atrybut o wartości dokładnie równa określonej wartości elementy opcja nie mają text atrybuty, można użyć zamiast :contains selektor, spróbuj tego:

Należy wybrać wszystkie elementy, które zawierają określony tekst.

$(function(){ 
    $('#my_button').click(function(){ 
     var unitName = "Unit2"; 
     $('.assUnit').find('option:contains('+unitName+')').remove(); 
    }); 
}); 

FIDDLE

Jeśli chcesz wybrać element, który ma tylko pewną wartość można użyć metody filter:

$(function(){ 
    $('#my_button').click(function(){ 
     var unitName = "Unit2"; 
     $('.assUnit option').filter(function() { 
      return $(this).text() === unitName 
     }).remove(); 
    }); 
}); 

FIDDLE

+0

Witam, zobacz mój komentarz do drugiego, który zasugerował, że zawiera –

+0

Hmm, tylko próbował, ale też nie działa. Nie otrzymuje jednak żadnych błędów konsoli. EDYCJA: teraz działa, musiał zmienić "wejście" na "opcja" dzięki. –

+0

@ user1597762 Tak, nie ma za co. – undefined

2

Prawdopodobnie będziesz mieć więcej szczęścia z tym:

$('.assUnit').find('option:contains('+unitName+')').remove(); 

Patrz także: :contains() selector

+0

Witaj, zawiera nie ma nic dobrego, ponieważ musi to być dokładny odpowiednik. zawiera ("unit2") na przykład również pasuje do "unit200" i będzie wiele wybranych menu i opcji. –

0

spróbować tej

$(function(){ 
    $('#my_button').click(function(){ 
     var unitName = "Unit2"; 
     $(".assUnit option:contains('"+unitName+"')").remove(); 
    }); 

}); 
Powiązane problemy