Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Какая-то проблема с методом find в ie7 и ie8 (https://javascript.ru/forum/jquery/30602-kakaya-problema-s-metodom-find-v-ie7-i-ie8.html)

norabirkin 09.08.2012 16:34

Какая-то проблема с методом find в ie7 и ie8
 
Совсем затупил никогда такого не замечал. Не находит элементы xml-документа. Например такой скрипт:

$(document).ready(function(){
var doc = '<root><element>CONTENT</element><element>OTHERCONTENT</element></root>';
var element = $(doc).find('element');
alert($(element[0]).html());
});

В ie9 выводит строку "CONTENT", как и надо. В ie8 и ie7 не происходит ничего вообще. В прочих браузерах все в порядке. В чем может быть ошибка?

norabirkin 09.08.2012 17:07

Попробовал без JQuery. Странностей стало больше. Вот такой, например код:

var html = '<root><element>CONTENT</element><element>OTHERCONTENT</element></root>';
var element = document.createElement('div');
element.innerHTML = html;
alert(element.innerHTML);

В ie9 выводит "<root><element>CONTENT</element><element>OTHERCONTENT</element></root>", а в ie8 выводит
"CONTENT</ELEMENT><ELEMENT>OTHERCONTENT</ELEMENT></ROOT>". Каким-то странным образом режет html-код

melky 09.08.2012 17:35

Попробуйте способ, который описан здесь
http://javascript.ru/forum/193221-post2.html

norabirkin 09.08.2012 17:38

Все чудесатее и чудесатее. Ищу первый дочерний элемент.

var html = '<root><element>CONTENT</element><element>OTHERCONTENT</element></root>';
var element = document.createElement('div');
element.innerHTML = html;
var first_child = element.childNodes[0];
alert(element.innerHTML);
alert(first_child);
alert(first_child.nodeValue);
alert(first_child.innerHTML);

В ie8 первым дочерним элементом оказывается текстовый узел с содержимым ("CONTENT"). В ie9 первый дочерний элемент как и должно быть некий элемент с содержанием "<element>CONTENT</element><element>OTHERCONTENT</element>". То есть ie8 как-то так калечит код, что распарсить его адекватно уже невозможно.

melky 09.08.2012 17:44

ёмаё, IE <= 8 не воспринимает никак незнакомые теги. Вы же парсите XML как HTML -> теги root и element уходят в никуда. либо используйте способ по ссылке из моего поста, или фиксите несуществующие элементы для IE.
"root element".replace(/(\S+?)(?=\s|$)/g, function (tagName) { document.createElement(tagName); });
// криво, но в одну строчку.

norabirkin 09.08.2012 17:47

А...блин...так вот в чем дело:) Спасибо. Сейчас попробую:)


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