как объединить два getElementsBy - PullRequest
2 голосов
/ 16 июня 2011

У меня есть фрагмент кода, подобный следующему:

var profileLinks = new Array();

for (var i = 0; i<searchResult.length; ++i) 
{
    var profileLink=searchResult[i].getElementsByTagName("a");
    profileLinks[i]=profileLink[0].href;
    alert(i+1+" of "+searchResult.length+" "+profileLinks[i]);
}

Кажется, я должен быть в состоянии сделать его более кратким, используя это:

//alternate construction (why doesn't this work?)

var searchResult = document.getElementsByClassName("f_foto").getElementsByTagName("a");

Что здесь не так?

Ответы [ 5 ]

2 голосов
/ 16 июня 2011

Используйте querySelectorAll() вместо:

var searchResult = document.querySelectorAll(".f_foto a");

IE 8 поддерживает querySelectorAll(), но не getElementsByClassName(), так что это также даст вам лучшую совместимость.

Для полной совместимости придерживайтесь исходного кода или используйте такую ​​библиотеку, как jQuery .

1 голос
/ 16 июня 2011
document.getElementsByClassName("f_foto")  

возвращает выбор, поэтому вы не можете связать функции с ним. Вам нужно указать элемент напрямую, а не весь выбор, например, это будет работать правильно.

 document.getElementsByClassName("f_foto")[0].getElementsByTagName("a"); 

Поскольку document.getElementsByClassName ("f_foto") [0] указывает на объект, а не на выделение объектов.

1 голос
/ 16 июня 2011

Вот почему у нас есть библиотеки - или даже современные браузеры.Вы ищете селектор CSS $('.f_foto a') в jQuery или $$('.f_foto a') в Prototoype / Chrome

0 голосов
/ 16 июня 2011

Я считаю, что getElementsByTagName можно применить только к узлу элемента, но результат getElementsByClassName наверняка будет списком узлов. Вам придется либо выбрать один ([0]?), Либо выполнить итерацию по коллекции (убедитесь, что она не пустая!).

0 голосов
/ 16 июня 2011

Вы вызываете getElementsByTagName на узле, а не в массиве, что и возвращает getElementsByClassName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...