2015-07-04 40 views
5

mam zmienna, która zawiera prostą HTML patrząc jak w poniższym przykładzie - zawartość zmiennej jest generowana dynamicznie poprzez Ajax:jQuery: Jak wyodrębnić tekst z określonego elementu wewnątrz zmiennej

var errors = "<span id='id1'>Value 1</span><span id='id2'>Value 2</span><span id='id3'>Value 3</span><span id='id4'>Value 4</span><span id='id5'>Value 5</span>"; 

Jak mogę pobierz tekst określonego elementu poprzez jego identyfikator w tej zmiennej, np. tekst zakresu z identyfikatorem = "id3"? Tutaj wynik powinien wynosić "Value 3".

Próbowałem następujących ale wynik mam zawsze jest albo pusty łańcuch lub "[object Object]":

  1. $(errors).filter('#id3')
  2. $(errors).filter('#id3').text()
  3. $(errors).find('#id3').text()

Aktualizacja:
Po przeczytaniu komentarzy i odpowiedzi na ten temat, podzieliłem swój kod i wydaje mi się, że problem dotyczy części Ajax, w której sukces zawiera data zawiera to, co pokazałem w powyższym przykładzie, ale wydaje się, że nie jest on zapisywany w zmiennej "errors". (Jeśli zmienię kod na twardy, to działa z .filter.)

var errors = ''; 
$.ajax({   
    type: "post", 
    url: "ajax.php", 
    cache: "false", 
    data: { 
     node: 'fetchErrors', 
     selectedLang: selectedLang 
    }, 
    success: function(data){ 
     errors = data; 
    } 
}); 

Czy ktoś może mi w tym pomóc?

Dziękujemy wcześniej, Mike

+3

Próbowałem twój 2nd ans ($ (błędy) .filter ("# id3"). Text()) w firefox działa dobrze. –

+1

Zgadzam się z @JohnDaniel ... działa dobrze w chrome. – manta

+0

@JohnDaniel: Dzięki za to. Mogę to teraz potwierdzić i właśnie zaktualizowałem mój post. – keewee279

Odpowiedz

2

To działa dla mnie (fiddle).

success: function(data){ 
    var result = $(data).filter("#id3").text(); 
} 
+0

Dzięki. Przyjmę to, ponieważ wskazywało to we właściwym kierunku. Mój problem dotyczył jednak Ajaxu, ponieważ jQuery przeniósł się przed osiągnięciem wyniku Ajax tak, że wszystko w części sukcesu zostało poprawione i wtedy to podejście działa dobrze. – keewee279

+0

@keewee yes ajax to '' 'asynchroniczny''' co oznacza, że ​​funkcja kończy się przed wynikami (' '' data''' w twoim przypadku) pochodzącymi z serwera. – dee

4

Byłaś na dobrej drodze ...

var errors = "<span id='id1'>Value 1</span><span id='id2'>Value 2</span><span id='id3'>Value 3</span><span id='id4'>Value 4</span><span id='id5'>Value 5</span>"; 
var obj = $(errors); 
var filter = $(obj).filter('#id3'); 
console.log(filter.text()); 

jsfiddle: fiddle

+0

Wielkie dzięki! Próbowałem tego, ale zwraca również pusty ciąg dla mnie. – keewee279

+0

Aktualizacja: Dziękujemy za dodanie skrzypiec. Mogę potwierdzić, że działa to również dla mnie i właśnie zaktualizowałem mój post. – keewee279

1

ta spełnia swoje zadanie:

$(errors).filter("#id3").text() 
+0

Dzięki. Próbowałem tego (patrz wyżej), ale nie działało w moim przypadku. – keewee279

2

spróbuj dodać async: false do właściwości ajax.

+0

Dzięki - czy możesz wyjaśnić, co to ma robić? – keewee279