2013-08-26 4 views
6

Mam stronę, która zmienia ID pól wejściowych za każdym razem. Jeśli na przykład teraz odwiedzę tę stronę, ID może być "stack_15_overflow", a następnym razem może to być "stack_293_overflow".Jak akceptować dowolne znaki pomiędzy * elementu getElementById (stack_ * _overflow)?

chcę użyć wartości wieloznaczny dla getElementById, takich jak "stack_ * _overflow" (gdzie * pasuje wszystko), aby ta wartość związaną z każdym uruchomieniem polu wprowadzania i kończący się z jakimś konkretnym tekstem, bez względu na to, co tekst jest pomiędzy.

Kod:

function HelloId(string){ 
    var name=string 
    document.getElementById('stack_*_overflow').value=name; 
} 
+4

Jeśli kontrolujesz HTML, użyj klasy i nie rób tego "dziwnego" selektora. To proste połączenie. – epascarello

+0

przeczytać, to pomoże również http://stackoverflow.com/questions/5376431/wildcards-in-jquery-selectors –

Odpowiedz

5
var elements = document.querySelectorAll('[id^="stack_"][id$="_overflow"]'); 
+0

Dlaczego 'querySelectorAll'? Otrzymuje element przez "id", który powinien zwrócić tylko 1 element ... – Ian

+1

@Ian '*' jest symbolem wieloznacznym (w pytaniu). To wybierze wiele elementów z wieloma różnymi identyfikatorami. – Paulpro

+1

@Ian, Cóż, domyślam się, że mógłby mieć wiele wejść z różnymi identyfikatorami podążającymi za tym samym wzorcem. Używanie 'querySelectorAll' tutaj jest bardziej kwestionowane, ponieważ PO używa już jQuery. – plalx

5

jQuery za attribute starts with i attribute ends with selektorów:

$("[id^='stack'][id$=overflow]"); 

Zauważ, że te przełączniki są drogie, określając rodzaj elementu może poprawić wydajność:

$('element').filter("[id^='stack'][id$=overflow]"); 
+0

Czy mówisz o "kosztowności"? Jestem całkiem pewny, że 'querySelectorAll' natywnie obsługuje selektory atrybutów, więc nie widzę powodu, dla którego chciałbyś wymusić 2 zapytania DOM używając' .filter() 'Byłoby inaczej w * niestandardowym selektorze jQuery *. Jestem całkiem pewny, że selektor jest oceniany od prawej do lewej, więc dodanie części 'element' nie przyspiesza niczego, po prostu filtruje zestaw wyników.Mógłbym jednak pomylić się co do tej części - może to być po prostu, kiedy mieć spację w selektorze, że te części są oceniane od prawej do lewej - ale każda "grupa" jest oceniana od lewej do prawej – Ian

2

nie można osiągnąć za pomocą getElementById. Lepszym rozwiązaniem byłoby querySelector lub querySelectorAll, gdzie uzyskasz pełne wsparcie dla selektorów CSS.

Reference at MDN

Musisz 2 niniejszego atrybutów selektorów:

Uzyskaj elementy rozpocząć z określonym ciągiem

document.querySelector('[id^="stack_"]'); 

Pierwsze elementy zawierają specyficzny ciąg

document.querySelector('[id*="stack_"]'); 

Uzyskaj elementy kończy z określonym ciągiem

document.querySelector('[id$="_overflow"]'); 

Poprzez połączenie końców i zaczyna selektorów, można uzyskać następujące i są w stanie osiągnąć pożądany rezultat:

document.querySelector('[id^="stack_"][id$="_overflow"]'); 

Szczęśliwe kodowanie!

+0

Dziękuję, działa jak urok! – Byzantine

Powiązane problemy