Добавьте -подтверждение: $ false для подавления подтверждения.
Я пришел к такому же решению:
var xml = $("<root><item1>text1</item1><item2>text2</item2>more text here</root>");
alert($(xml).contents().empty().end().text());
Итак, решение, которое я придумал, состоит в том, чтобы удалить узлы item1 и item2, оставив только текст:
$(responseXML).find('item').each(function(){
var item1_text = $(this).find('item1').text();
var item2_text = $(this).find('item2').text();
$(this).contents().empty(); //removes the other nodes
var extra_text = $(this).text();
}
Используйте функцию contents (). Например, если у вас есть фрагмент XML, например:
var root = $('<root><item1>text1</item1><item2>text2</item2>more text here</root>');
, то вы можете получить текст через:
var txt = root.contents()[2]
Это предполагает, что текстовый узел всегда является 3-м дочерним элементом
var textList = root.contents().filter(function() { return this.nodeType == 3; });
Это возвращает массив текстовых узлов, обнаруженных во фрагменте XML. Чтобы получить доступ к строкам в списке, просто откройте срез массива:
var txt = textList[0];
Получит правильное корневое / текстовое значение. Текст можно разместить везде в корневом узле.
для:
<div id="xml"><root><item1>text1</item1><item2>text2</item2>more text here</root></div>
Примечание: "встроенный" xml не работает в Internet Explorer, но если вы замените root и itemX в примере допустимыми именами узлов Html, он тоже будет работать.
Объяснение: DOM обрабатывает пустые и текстовые узлы как элементы. если вы отлаживаете вышеуказанный .each (), вы увидите следующее:
alert( this.nodeName + '|' + this.nodeType + "|" + this.nodeValue);
#text|3| , ITEM1|1|null , #text|3| , ITEM2|1|null , #text|3| more text here
(Извините, форматирование не работает с венгерской клавиатурой, но все же)