jQuery 不原生支持 XML 解析,必须先用 DOMParser 将 XML 字符串解析为 document 对象,再传入 $() 才能使用 CSS 选择器查询;直接 $(xmlStr) 会失败。
jQuery 本身不提供原生 XML 解析能力,它依赖浏览器的 DOMParser 或 IE 的 ActiveXObject 来将 XML 字符串转为可查询的 XML 文档对象;之后才能用 jQuery 封装的 CSS 选择器语法操作节点。直接对 XML 字符串调用 $() 在现代浏览器中会失败或返回空结果。
jQuery 的 $() 默认只处理 HTML 片段(会走 innerHTML 流程),对 XML 字符串无效。必须显式用 DOMParser 解析,再把解析后的 document 传给 jQuery:
const xmlStr = ``; const parser = new DOMParser(); const xmlDoc = parser.parseFromString(xmlStr, "text/xml"); // ✅ 正确:把 xmlDoc 传给 jQuery const $xml = $(xmlDoc); const name = $xml.find("name").text(); // "A" const id = $xml.find("item").attr("id"); // "1" A 9.99
若跳过解析、直接 $(xmlStr),在 Chrome/Firefox 中会返回空的 jQuery 对象,.find() 无结果;IE 旧版本可能抛错。
在 XML 上使用 .attr() 和 .text() 是安全的,但要注意:
.text() 会拼接所有子文本节点,不区分换行/空白 —— 如果
XML 中有缩进换行,.text() 可能返回带空格的字符串,需手动 .trim()
.attr("xxx") 只读属性值,不支持命名空间前缀(如 xmlns:xsi);带命名空间的属性需用 .prop("attributes") 手动遍历$xml.find("Name") 匹配不到
每次调用 DOMParser.parseFromString() 都是同步阻塞操作,且生成完整 DOM 树开销大:
xml2js 或原生 XMLHttpRequest.responseXML)xmlDoc 或 $xml 实例,不要反复调用 parseFromString
//item[price > 10])必须手写循环或改用 document.evaluate()
真正省事的点在于 CSS 选择器语法,不是解析本身;别指望 $(xmlStr).find("...") 一行搞定 —— 解析这一步绕不开,且必须放在最前面。