Для всех браузеров вы можете использовать Array.prototype.slice
через call
или apply
(он работает на любом объекте , подобном массиву ):
Array.prototype.slice.call(document.querySelectorAll('.row'))
О вашем обновленном вопросе:
Я использую это для обработки событий «click»:
blockquote>Array.prototype.slice.call(document.querySelectorAll('.row')) .forEach(function(header) { return header.addEventListener('click', function(e) { headerClick(e, header, header.querySelector('.exy')) }); });
Я бы не использовал
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. Вавилон является одним из таких транспилеров.
Вот полный рабочий пример, основанный на вашем тестировании. Сравните это с тем, что у вас есть, чтобы выяснить, куда вы идете неправильно.
<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>
В более старых версиях jquery вам придется сделать это «javascript way», используя settimeout
setTimeout( function(){$('div').hide();} , 4000);
или
setTimeout( "$('div').hide();", 4000);
Недавно с jquery 1.4 было добавлено это решение:
$("div").delay(4000).hide();
Конечно замените «div» на правильный элемент, используя действительный селектор jQuery и вызовите функцию, когда документ готов .
setTimeout
ожидает, что это первый параметр либо как функция, либо строка. Вы ничего не предоставляете, вы выполняете функцию, а возврат этой функции - это то, что вы отправляете в функцию setTimeout
. Это будет работать, если вы передадите эту функцию, например: setTimeout( $( "#div" ).hide, 4000 );
.
– Jacob Relkin
11 March 2010 в 16:44
deletesuccess
в селекторе, но deletesucess
в id.
– rosscj2533
11 March 2010 в 16:54