Jump to content
  • 0

Как кроссбраузерно подгрузить XML?


Bolmazov
 Share

Question

Вопрос: Как кроссбраузерно подгрузить XML?

...пока ждал, нашел сам.

Ответ:

	if(document.ActiveXObject){
var doc= new ActicveXObject("Microsoft.XMLDOM");

}
else if (document.implementation&&document.implementation.createDocument){
var doc=document.implementation.createDocument("", "doc", null);
}
doc.async=false;
doc.load=("XmlUrl");

...вероятно так.

Edited by Bolmazov
Link to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 0

...дальше пишу свой кодик. И как то, хочу вам сказать тяжко идет этот JS и всё что с ним связанно, а еще столкнулся вот с чем:

Загрузил XML-файл используя кроссбраузерную функцию loadXMLDoc

И пытаюсь воспользоваться благами jQuery, но что-то не выходит.

я хочу, всего лишь вывести на экран текст элемента с id='1':

	xmlDoc=loadXMLDoc('TASKS/test.xml');
nodes=xmlDoc.documentElement.childNodes;

node = $("node[@id='1']", nodes);
alert(node.html());

//А вот таким макаром выводит текст первого элемента:
//var value = nodes[0].nodeValue;
//alert(value);

Вот малюсинький XML на котором я опыты ставил:

 <?xml version="1.0" ?>
<node id='1'>
This is node1.
</node>

Как обуздать jQuery в этом случае?

P.S.

Как в FF посмотреть ошибки JS кода? )) Вот в IE снизу в левом углу по значку щелкаешь и на тебе. А в FF чёт не нашел...

Edited by Bolmazov
Link to comment
Share on other sites

  • 0
P.S.

Как в FF посмотреть ошибки JS кода? )) Вот в IE снизу в левом углу по значку щелкаешь и на тебе. А в FF чёт не нашел...

Инструменты - Консоль ошибок (Ctrl + Shift + J) Ну и firebug кажись тоже это умеет.
Link to comment
Share on other sites

  • 0

Поройтесь в jQuery плагинах... Там должно быть много про XML: http://plugins.jquery.com/search/node/xml+...project_project

Да и советовал бы XML конвертнуть в JSON (XML to JSON есть в плагинах) а уже потом легко работать...

Edited by Ялекс
Link to comment
Share on other sites

  • 0

Anami, спасибо. Немного не удобно жать Ctrl+Shift+J, но всё же.

Ялекс, спасибо. JSON'ом я не стал пользоваться, мне кажется это лишнее, но по ссылке я нашел кое-что интересное.

Двигаемся дальше...

	nodes = $(".node").get();
for (node in nodes){
nodes[node].id=node;
nodes[node].onclick=click();
}

nodes[node].id=node; - присваивает всем элементом с class=node порядковый id (хотя вроде бы id не должен начинаться с цифры)

nodes[node].onclick=click(); - а вот НЕ ФУРЫЧИТ. Почему?

Link to comment
Share on other sites

  • 0
nodes[node].onclick=click(); - а вот НЕ ФУРЫЧИТ. Почему?

Насколько я понимаю, click - это функция? Тогда нужно присваивать ее без скобок, потому что со скобками - это не функция, а результат ее вызова.

Link to comment
Share on other sites

  • 0

Точно в цель SelenIT. Спасибо.

Очень надеюсь, что я не злоупотребляю вашим временем и вниманием. Уверяю, что ваши ответы мне очень помогают в изучении и перед тем как что-то спрашивать, я пытаюсь ответить на вопрос самостоятельно. Иногда не выходит, как и в этот раз:

Выше я писал запросик на jQuery: nodes = $(".node").get();

А хочится найти все элементы с class='node' также содержащие в себе элементы с class='node'.

Пишу так:

nodes = $("//*.node/*.node").get();

Чет не выходит.

Да и вообще элементарная, должно быть, конструкция типа: $("//div/span") не работает.

Вопрос: Как найти на jQuery все элементы с class='node' также содержащие в себе элементы с class='node'?

Edited by Bolmazov
Link to comment
Share on other sites

  • 0

мда, туплю :)

имеем хтмл:

<div class="node"><span class="node"></span></div>

$('.node').find('.node') корректно работает:

он:

-- сначала ищет в элементы с классом node;

-- затем ВНУТРИ них ищет те, которые содержат элемент с классом node.

Естественно, это будет span.

$('.node:has(.node)') делает так:

-- ищет элементы с классом node, СОДЕРЖАЩИЕ элемент с классом node.

То есть получим div.

Так что все ок :(

Link to comment
Share on other sites

  • 0

Нет, не равносильно.

$('.node').find('.node').end() в вышеупомянутом примере вернет набор из двух элементов -- [div.node, span.node]

Сначала ведь найдутся оба элемента с классом node, потом вы найдете внутри каждого из них элементы с классом node, а end'ом это отмените.

Так что пока иного способа найти такой div, кроме как с использованием псевдоселектора, я не нашел :)

Link to comment
Share on other sites

  • 0

e1f, надеюсь, что я вас правильно понял. Но в таком случае это нелогично. Зачем тогда вообще нужен end()? В описанном алгоритме он не на что не повлиял. Не отфильтровал span у которого нет внутри элемента с классом node.

P.S. по хорошему надо было бы проверить свои аргументы, но время позднее и не до этого.

Link to comment
Share on other sites

  • 0

А end() не производит никаких выборок. Он делает следующее:

Возвращает набор элементов к его предыдущему состоянию, до последней "деструктивной" операции над набором элементов. Если же такой операции не производилось, будет возвращен пустой набор. "Деструктивная" операция - любая операция, изменяющая существующий набор элементов. Это все Traversing функции, которые возвращают объект jQuery (add, andSelf, children, filter, find, map, next, nextAll, not, parent, parents, prev, prevAll, siblings и slice), а также функция clone() из раздела Manipulation.
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy