Скрыть h: сообщения через некоторое время в чистом JSF [дублировать]

Для всех браузеров вы можете использовать Array.prototype.slice через call или apply (он работает на любом объекте , подобном массиву ):

Array.prototype.slice.call(document.querySelectorAll('.row'))

О вашем обновленном вопросе:

Я использую это для обработки событий «click»:

Array.prototype.slice.call(document.querySelectorAll('.row'))
    .forEach(function(header) {
      return header.addEventListener('click', function(e) {
        headerClick(e, header, header.querySelector('.exy'))
      });
    });
blockquote>

Я бы не использовал querySelectorAll для это вообще, я бы использовал делегирование событий . Предположительно, все эти элементы .row находятся внутри общего контейнера (в конечном счете, конечно, все они находятся в body, но, надеюсь, есть контейнер «ближе» к ним, чем это). При делегировании событий вы делаете это:

  • Hook click только один раз, на контейнере
  • Когда происходит щелчок, проверьте, прошла ли он через один из ваших целевые элементы на пути к контейнеру

Для вашего котируемого кода это выглядит примерно так:

// A regex we'll reuse
var rexIsRow = /\brow\b/;
// Hook click on the container
document.querySelector("selector-for-the-container").addEventListener(
    "click",
    function(e) {
        // See if we find a .row element in the path from target to container
        var elm;
        for (elm = e.target; elm !== this; elm = elm.parentNode) {
            if (rexIsRow.test(elm.className)) {
                // Yes we did, call `headerClick`
                headerClick(e, elm, elm.querySelector('.exy'));
                // And stop looking
                break;
            }
        }
    },
    false
);

В более современных браузерах , вы могли бы использовать elm.classList.contains("row") вместо обычного выражения, но, к сожалению, не в IE9 или ранее.


Тем не менее, вместо того, чтобы поддерживать отдельную кодовую базу, как указал gcampbell вы можете использовать функции ES6 (ES2015) в своем коде, а затем транслировать с транспилером, который преобразует их (ну, те, которые могут быть преобразованы, что их очень много) в синтаксис ES5. Вавилон является одним из таких транспилеров.

36
задан Benjamin W. 20 February 2016 в 11:18
поделиться

4 ответа

Вот полный рабочий пример, основанный на вашем тестировании. Сравните это с тем, что у вас есть, чтобы выяснить, куда вы идете неправильно.

<html> 
  <head> 
    <title>Untitled Document</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript"> 
      $(document).ready( function() {
        $('#deletesuccess').delay(1000).fadeOut();
      });
    </script>
  </head> 
  <body> 
    <div id=deletesuccess > hiiiiiiiiiii </div> 
  </body> 
</html>
88
ответ дан rosscj2533 23 August 2018 в 01:46
поделиться

В более старых версиях jquery вам придется сделать это «javascript way», используя settimeout

setTimeout( function(){$('div').hide();} , 4000);

или

setTimeout( "$('div').hide();", 4000);

Недавно с jquery 1.4 было добавлено это решение:

$("div").delay(4000).hide();

Конечно замените «div» на правильный элемент, используя действительный селектор jQuery и вызовите функцию, когда документ готов .

43
ответ дан Community 23 August 2018 в 01:46
поделиться
  • 1
    Я не думаю, что первый пример будет работать ... – Pointy 11 March 2010 в 16:40
  • 2
    Причина в том, что функция setTimeout ожидает, что это первый параметр либо как функция, либо строка. Вы ничего не предоставляете, вы выполняете функцию, а возврат этой функции - это то, что вы отправляете в функцию setTimeout. Это будет работать, если вы передадите эту функцию, например: setTimeout( $( "#div" ).hide, 4000 );. – Jacob Relkin 11 March 2010 в 16:44
  • 3
    @rag - для одного вы не загружаете jQuery. – Kobi 11 March 2010 в 16:49
  • 4
    @rag: у вас есть опечатка: deletesuccess в селекторе, но deletesucess в id. – rosscj2533 11 March 2010 в 16:54
  • 5
    @ross и @marcgg, fyi, ваш унылый уровень обслуживания (позор вам, никакой реакции в течение 20 минут !!!) оставил OP без выбора, но чтобы задать тот же вопрос снова : stackoverflow.com/questions/2426659/… – Pekka 웃 11 March 2010 в 17:37
setTimeout('$("#someDivId").hide()',1500);
8
ответ дан Jage 23 August 2018 в 01:46
поделиться
1
ответ дан Osahady 5 November 2018 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: