2010-04-11 2 views
33

У меня есть HTML-страница.Как получить все элементы, имена которых начинаются с некоторой строки?

Я хотел бы извлечь все элементы, имя которых начинается с «q1_».

Как я могу достичь этого в JavaScript?

Спасибо!

+0

Вы имеете в виду имя тега или значение а 'name' атрибут? – Gumbo

+0

Все ли элементы, относящиеся к одному типу тегов? Являются ли они все DIV или LI, например? – graphicdivine

+0

Да, все элементы имеют тип «вход». –

ответ

43

быстрый и простой способ заключается в использовании jQuery и сделать это:

var $eles = $(":input[name^='q1_']").css("font-color","yellow"); 

Это будет захватывать все элементы, имени атрибута начинается с «q1_». Для того, чтобы преобразовать полученную коллекцию объектов Jquery к коллекции DOM, сделайте следующее:

var DOMeles = $eles.get(); 

см http://api.jquery.com/attribute-starts-with-selector/

В чистом DOM, вы могли бы использовать getElementsByTagName, чтобы захватить все входные элементы и петли через результирующий массив. Элементы с name, начинающиеся с «» q1_ получить толкнул в другой массив:

var eles = []; 
var inputs = document.getElementsByTagName("input"); 
for(var i = 0; i < inputs.length; i++) { 
    if(inputs[i].name.indexOf('q1_') == 0) { 
     eles.push(inputs[i]); 
    } 
} 
+9

ничего без jQuery ?? – Varun

+2

Варун, второй код, сжатый в ответе karim79, - это простой javascript, он не использует jQuery. – cleberz

+0

Хороший ответ, за исключением того, что вам нужно '.css (« color »,« yellow »);', поскольку 'font-color' не существует в css. Я делаю эту ошибку очень часто.: P – 2015-02-20 23:43:07

0

Вы можете попробовать использовать jQuery с Attribute Contains Prefix Selector.

$('[id|=q1_]') 

Не протестировали его, хотя.

+0

Селектор '[attr | = value]' предполагается использовать для идентификаторов языков. – Gumbo

19

Вы можете использовать getElementsByName ("input"), чтобы получить коллекцию всех входов на странице. Затем прокрутите коллекцию, проверяя имя на пути. Что-то вроде этого:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=utf-8 /> 
<title>JS Bin</title> 

</head> 
<body> 

    <input name="q1_a" type="text" value="1A"/> 
    <input name="q1_b" type="text" value="1B"/> 
    <input name="q1_c" type="text" value="1C"/> 
    <input name="q2_d" type="text" value="2D"/> 

    <script type="text/javascript"> 
    var inputs = document.getElementsByTagName("input"); 
    for (x = 0 ; x < inputs.length ; x++){ 
    myname = inputs[x].getAttribute("name"); 
    if(myname.indexOf("q1_")==0){ 
     alert(myname); 
     // do more stuff here 
     } 
    } 
    </script> 
</body> 
</html> 

Demo

+0

Спасибо за пример кода! –

+0

что-нибудь более эффективное? – Varun

+0

@ Varun, что неэффективно об этом? – graphicdivine

5

HTML DOM querySelectorAll() метод здесь, кажется, склонен.

W3School Ссылка дал here

Синтаксис (как указано в W3School)

document.querySelectorAll(CSS selectors) 

Таким образом, ответ.

document.querySelectorAll("[name^=q1_]") 

Fiddle

Edit:

Учитывая предложение FLX в добавлении ссылку на MDN here

+1

Ваш андер действителен, но W3School считается плохим источником (устаревший doc везде). Лучше использовать MDN, намного лучше. – FLX

Смежные вопросы