2012-04-13 2 views
0

Я пытаюсь использовать Anarchy Media Player на своем сайте, но мне пришлось немного изменить код, потому что мои медиафайлы/URL-адреса не в стандартном формате. Теперь он захватывает видеофайлы, но javascript находит ВСЕ ссылки и пытается добавить к нему игрока. Я даже добавил идентификатор «видео» к видеосвязи, но все же находит все ссылки на странице и добавляет к нему игрока. Как я могу отделить эти ссылки, чтобы добавить к ним только игроков?getElementsByTagName только для определенных ссылок

Вот часть JavaScript, который выглядит по ссылкам:

var all = document.getElementsByTagName('a'); 
for (var i = 0, o; o = all[i]; i++) { 
    if(o.idName="video" && o.className!="amplink") { 
     // Add player code... 
    } 
} 

Спасибо за вашу помощь.

+0

Почему не [getElementsByClassName] (https://developer.mozilla.org/en/DOM/document.getElementsByClassName)? – ajax333221

+0

@ ajax333221 Потому что IE ... Хотя использование jQuery не будет плохой идеей. – jli

ответ

3

Не знаю, почему вы не просто делать это:

var all = document.getElementsByTagName('a'); 
for (var i = 0, len = all.length; i<len; i++) { 
    if(all[i].idName=="video" && all[i].className!="amplink") { 
     // Add player code... 
    } 
} 

Это должно работать для вас. Обратите внимание, что я сохранил значение длины массива, поэтому вам не нужно искать его на каждой итерации. Минимальный, но увеличивает производительность немного.

Вы также установили idName в видео, если вы сделали idName="video" в вашем операторе if, не сравнивая (который всегда будет возвращать true, что было вашей проблемой). Используйте оператор double equals (==) или оператор triple equals (===) для сравнения значений.

+0

@ Elliot, Это не похоже на работу, но я закончил обертку ссылки в div id = video и используя * var all = document.getElementById ("video") .getElementsByTagName ("a"); * Спасибо. Теперь я столкнулся с другой проблемой, нужно распознать тип носителя, чтобы вызвать только требуемого игрока. Мне, вероятно, нужно начать новую тему. –

+0

Да, это то, что я бы рекомендовал делать. –

+0

@ Elliot, Большое вам спасибо за помощь :) –

0

Вы уверены, что не имеете в виду if (o.className == "amplink")?

Кроме того, что у вас есть это хорошо (для o.idName="video" бита, который всегда возвращает значение ИСТИНА, за исключением): http://jsfiddle.net/VpMVe/

+0

NM. Я был неправ. –

0

вы можете получить элементы с помощью querySelectorAll, но это not supported in older browsers (который был бы старше IE8, FF3.5, Opera 10, Chrome 4 и Safari 3.1). Это похоже на таргетинг элементов с помощью селекторов CSS (и jQuery). Вот a demo, получив все ссылки с классом video, чтобы покраснели.

function get(selector) { 
    return document.querySelectorAll(selector) 
} 

(function() { 
    //get all <a> with class "video" 
    var video = get('a.video'); 

    //for each, turn them red 
    for (var i = 0; i < video.length; i++) { 
     video[i].style.color = 'red'; 

     //in your case, do whatever you want for each target here 

    } 
}())​ 
0

Нет атрибута idName. Это всего лишь o.id. И может быть только один идентификатор, так что это может вызвать некоторые проблемы. Также вы назначаете его, а не сравниваете для равенства, которое всегда оценивается как true. Если у вас более одного класса, например. class="amplink someOtherClass"! = Amplink будет оценивать значение true. Лучше сделать совпадение с именем класса. Например: && !o.className.match(/ampLink/)

Сделайте видеоролик в другом классе и выполните матчи вместо этого.

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