Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Требуется объект (?) (https://javascript.ru/forum/events/26585-trebuetsya-obekt.html)

Erika 14.03.2012 02:32

Хотя IE по идее не должен на *TagName() ругаться. Это ведь его родная функция вродь...

devote 14.03.2012 02:43

Цитата:

Сообщение от Erika (Сообщение 162983)
Хотя IE по идее не должен на *TagName() ругаться. Это ведь его родная функция вродь...

Да но может просто он не находи никаких span и возвращает null а вы пытаетесь обратится к несущественному объекту

Erika 14.03.2012 04:52

Дело в том, что находит. Я же написала в первом посте, что код работает.
Просто меня смутило то, что в [1] он работает но, ругается в IE.
В то время, как при применении к элементу [2] та же функция полностью работает и не ругается не в одном арбузе.
(x)HTML дерево построено правильно, коды обоих таблиц одинаковые, количество элементов в селекторах равны.

nikita.mmf 14.03.2012 09:41

querySelectorAll в IE8, вроде бы, корректно работает только у document. Во всяком случае в jquery пользуются им только от document

devote 14.03.2012 10:39

Цитата:

Сообщение от nikita.mmf (Сообщение 163038)
querySelectorAll в IE8, вроде бы, корректно работает только у document. Во всяком случае в jquery пользуются им только от document

Да ты шо серьезно чтоль? может стоит все же на исходники джуквери взглянуть. Знаю только что в сафари был баг, и есть в самом методе незначительный баг, который не особо приводит к плачевным результатам.

nikita.mmf 14.03.2012 13:49

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" );
						}
					}
				}

devote 14.03.2012 13:54

nikita.mmf,
И? что читать код не умеем?
context.querySelectorAll

любой контекст кроме тега object

nikita.mmf 14.03.2012 13:58

devote,
сорри, ошибся, мне всегда казалось, что в строке
return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
написано document, а не context

devote 14.03.2012 14:14

единственный баг в 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>
Это такой некий своеобразный баг, который впринципе не сильно влияет на выборку.

Erika 15.03.2012 06:40

Спасибо ребят)
Я уже выяснила где зарыта сАбака)
Тема off


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