Требуется объект (?)
Привет спецам)
Возможно вам это, как два пальца но, я только начала изучение JavaScript По этому, для меня пока это сложно... Суть проблемы в том, что есть массив элементов (".elem") в количестве 6 штук. Мне надо чтоб при наведении на ячейку выводилось инфо о статье, а при отведении (onmouseout) вновь все было по старому, в ячейке отображалось первью статьи. Я придумала код и он работает но, IE в низу страницы показывает ошибку. Мне ошибки не надо, по этому вот и ищу способ ее избежать.
function show_lib(x, y) {
var all_table = document.querySelectorAll('.all-table')[1];
var n_table = all_table.querySelectorAll('.main-table');
for (i = 0; i < n_table.length; i++) {
if (i == x - 1) {
if (y == 1) {
n_table[i].getElementsByTagName('span')[0].style.display = "none";
n_table[i].getElementsByTagName('span')[1].style.display = "block";
}
if (y == 2) {
n_table[i].getElementsByTagName('span')[1].style.display = "none";
n_table[i].getElementsByTagName('span')[0].style.display = "block";
}
}
}
|
Какая версия IE? querySelectorAll есть только в IE8+
|
какая версия ИЕ?
|
Octane,
опередил меня :) |
Отвечаю всем и сразу)))
IE8++ Для нижней таблицы [2] все работает и ошибок не выдает. Но, для [1] - объект требует... Какой (?) все вродь на месте) |
var all_table = document.querySelectorAll('.all-table')[1];
var n_table = all_table ? all_table.querySelectorAll('.main-table') : [];
|
Спасибо, сейчас кофе допью и попробую)
|
Все равно ругается...( Ладно, утро вечера мудренее. Проснусь - буду думать)
|
ну значит только на эти инструкции может ругаться .getElementsByTagName('span')
|
Я и по другому пробовала. querySelectop('.lib-header') && querySelector('.header-article')
|
Хотя IE по идее не должен на *TagName() ругаться. Это ведь его родная функция вродь...
|
Цитата:
|
Дело в том, что находит. Я же написала в первом посте, что код работает.
Просто меня смутило то, что в [1] он работает но, ругается в IE. В то время, как при применении к элементу [2] та же функция полностью работает и не ругается не в одном арбузе. (x)HTML дерево построено правильно, коды обоих таблиц одинаковые, количество элементов в селекторах равны. |
querySelectorAll в IE8, вроде бы, корректно работает только у document. Во всяком случае в jquery пользуются им только от document
|
Цитата:
|
devote,
jquery 1.7.1
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
var oldContext = context,
old = context.getAttribute( "id" ),
nid = old || id,
hasParent = context.parentNode,
relativeHierarchySelector = /^\s*[+~]/.test( query );
if ( !old ) {
context.setAttribute( "id", nid );
} else {
nid = nid.replace( /'/g, "\\$&" );
}
if ( relativeHierarchySelector && hasParent ) {
context = context.parentNode;
}
try {
if ( !relativeHierarchySelector || hasParent ) {
return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
}
} catch(pseudoError) {
} finally {
if ( !old ) {
oldContext.removeAttribute( "id" );
}
}
}
|
nikita.mmf,
И? что читать код не умеем? context.querySelectorAll любой контекст кроме тега object |
devote,
сорри, ошибся, мне всегда казалось, что в строке return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); написано document, а не context |
единственный баг в querySelecor это то что делать запрос нужно от парента, если это не document. Тоесть:
<!doctype html>
<html>
<head>
</head>
<body>
<div id="mycontext">
<span></span>
</div>
<script type="text/javascript">
var div = document.getElementById( 'mycontext' );
var elems = div.querySelectorAll( div.nodeName + " span");
alert( [ elems[0], elems[0].nodeName ] );
</script>
</body>
</html>
Это такой некий своеобразный баг, который впринципе не сильно влияет на выборку. |
Спасибо ребят)
Я уже выяснила где зарыта сАбака) Тема off |
| Часовой пояс GMT +3, время: 06:46. |