Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Клик по дочернему <a> элементу div'a (https://javascript.ru/forum/events/10817-klik-po-dochernemu-ehlementu-div%27.html)

HukpoFuJl 22.07.2010 04:53

Клик по дочернему <a> элементу div'a
 
Здравствуйте... Вот написал кодик такой:
<script>
     var divs = document.getElementsByTagName("DIV");
     for (var i = 0; i < divs.length; i++){
         if(divs[i].id.indexOf('pa') == 0){
             var elems = divs[i].getElementsByTagName('*');
             for(var i=0; i<elems.length; i++){
                 if(elems[i].tagName.indexOf('a') == 0){
                      elems[i].parentNode.removeChild(elems[i]);
                 }
             }
         }
     }
 </script>

По сути должен работать так:
Находим все DIV элементы в массив,
Находим DIV, у которого ID начинается на "pa",
Получаем все дочерние элементы,
Получаем первый попавшийся элемент A,
Удаляем его.
(мне по сути удалять его не нужно, но для наглядности, чтобы быть уверенным, что его нашло написал пока так.)

Вроде всё правильно... вот только не работает... Вот кусок HTML'a который должен обрабатываться:
<div id="paKVyWMWe">
     <table border="0" cellspacing="0" cellpadding="0" class="caKVyWMWe" id="aKVyWMWe" style="z-index:10000;width:262px">
          <tbody>
               <tr>
                    <td valign="top" width="12">
                         <a href="javascript://" onclick="faKVyWMWe('none');return false;" title="Закрыть">
                              <img alt="" src="урл картинки" style="стиль">
                         </a>
                    </td>
                    <td width="250">
                         <script type="text/javascript">
                              document.write('<IFRAME (фрейм)></IFRAME>');
                         </script>
                         <iframe (фрейм)>
                         </iframe>
                    </td>
               </tr>
          </tbody>
     </table>
</div>


Подскажите новичку - где я ошибся?

exec 22.07.2010 06:31

Внутренний и внешний цикл используют переменную с одним и тем же названием для итератора.

Да и вообще можно было бы обойтись одним циклом:

var divs = document.getElementsByTagName('DIV');
for ( var i = 0; i < divs.length; i++ ) {
	if ( divs[i].id.indexOf('pa') == 0 ) {
		var e = divs[i].getElementsByTagName('a')[0];
		e.parentNode.removeChild(e);
	}
}


+ добавить break, если ссылка всегда только одна, чтобы не было лишних итераций после того, как ссылка уже найдена.

HukpoFuJl 22.07.2010 08:53

О, отлично, работает, спасибо... :)
Сделал так:
<script>
var divs = document.getElementsByTagName('DIV');
    for ( var i = 0; i < divs.length; i++ ) {
    if ( divs[i].id.indexOf('pa') == 0 ) {
        var e = divs[i].getElementsByTagName('a')[0];
        e.click();
        break;
    }
}
</script>

Результаты такие:
Opera и IE - клик сработал
FireFox и Chrome - не сработал

Есть какие-либо альтернативы "click()", чтобы работали во всех браузерах?

ЗЫ: для тех кто наверняка подумал, что я делаю всплывающую в новом окне рекламу, или ещё что-нить - вы неправы!
Я наоборот избавляюсь на своём сайте от рекламного баннера, навязанного хостером.

exec 22.07.2010 09:11

Используйте fireEvent/dispatchEvent.

HukpoFuJl 22.07.2010 12:10

Блин, что-то я ковырялся, гуглил, вроде что-то понял, но не особо... Просто я программист немного другого напрвления и с яваскриптом сталкиваюсь впервые, может поможете мне мои мысли в код преобразовать (если я конечно правильно всё себе представляю :) )
<a href="javascript://" onclick="faKVyWMWe('none');return false;" title="Закрыть">
Как я говорил, по этому элементу нужно вызвать клик... В принципе аналогично можно просто выполнить его onclick функцию... Проблема только в том, что имя функции динамическое и постоянными остаються только первые две буквы "fa"... Приведенный в первом посту код я редактировать не могу - его ставит хостер и я его просто в редакторе не вижу... Всё остальное редактировать я могу...

Предполагаемое решение:
Можно как-нибудь функцию "onclick" с моего "a" объекта получить и приписать например в body:
<body onLoad="вот сюда">

HukpoFuJl 22.07.2010 13:09

Всё, вопрос отзываю =) Сделал проще... Посмотрел, что делает вызываемая мною функция:
function favi8R2(a){try{document.getElementById("pavi8R2").style.display=a;}catch(e){}try{document.getElementById("avi8R2").style.display=a;}catch(e){}}function f2avi8R2(){favi8R2('');}
Отобрал из неё нужное и просто запустил на выполнение при загрузке страницы:
<script>
     var divs = document.getElementsByTagName('DIV');
     for ( var i = 0; i < divs.length; i++ ) {
          if ( divs[i].id.indexOf('pa') == 0 ) {
               var e = document.getElementById(divs[i].id);
               e.style.display='none';
               break;
          }
     }
</script>
Теперь всё работает на всех браузерах, спасибо за помощь exec.


Часовой пояс GMT +3, время: 15:15.