从 ajax 调用输出 XML 文件中的注释



如何将.xml文件中的注释内容输出到我的文本区域?

我.html:

<textarea name="comment" id="comment" rows="3"/>

我.xml:

<div>
<ab type="transcription"><!--This is a comment--></ab>
</div>

我.js:

$.ajax({
type: "GET",
url: "../data/cards/1799.xml",
dataType: "xml",
cache: false,
success: function (xml) {
[...]
var mycomment = $(xml).find("ab").attr("type", "transcription");
$("comment").val(mycomment)

.text(( 不输出任何内容。提前感谢您对正确方向的任何提示!

你的HTML元素是一个<textarea>,而不是一个<comment>,所以$('comment').val不起作用。另外,要获取注释的文本,您应该使用

$(xml).find('ab').text()

仅 - 使用.attr设置或获取节点的属性,您不关心。因此,请尝试:

const text = $(xml).find('ab').text();
$("#comment").val(text);

前面的#表示您要查找具有该id的元素。(没有任何符号,表示要查找具有该标记名称的元素。

在 XML 中,如果要标识类型为transcriptionab,则应使用查询字符串:

ab[type="transcription"]

另一个问题是text(或textContent(不能识别注释节点 - 但是,如果<ab>的内容只是该注释,那么您可以使用.html.innerHTML来检索它。

另请注意,没有必要为此包含像jQuery这样的大型库 - 您可以在vanilla Javascript中轻松实现它:

fetch(<url>)
.then(res => res.text())
.then((text) => {
const doc = new DOMParser().parseFromString(text, 'text/html');
const text = doc.querySelector('ab').innerHTML;
document.querySelector('#comment').value = text;
});

演示:

const responseText = `<div>
<ab type="transcription"><!` + `--This is a comment--></ab>
</div>`;
const doc = new DOMParser().parseFromString(responseText, 'text/html');
const text = doc.querySelector('ab').innerHTML;
document.querySelector('#comment').value = text;
<textarea id="comment"></textarea>

要访问注释节点的内容,您可以使用childNodes[0]导航到该节点,然后获取其textContent

const responseText = `<div>
<ab type="transcription"><!` + `--This is a comment--></ab>
</div>`;
const doc = new DOMParser().parseFromString(responseText, 'text/html');
const text = doc.querySelector('ab').childNodes[0].textContent;
document.querySelector('#comment').value = text;
<textarea id="comment"></textarea>

最新更新