javascript - 无法使用它的属性获取 xml 元素的内部 HTML

标签 javascript jquery html xml

我有一个很大的 xml 文件,内容如下:

<satellites>
<sat name="NSS 9/Yamal 300K (177.0W)" flags="0" position="-1770">
    <transponder frequency="3792000" symbol_rate="2048000" polarization="1" fec_inner="2" system="1" modulation="1"/>
    <transponder frequency="3987000" symbol_rate="8950000" polarization="1" fec_inner="2" system="0" modulation="1"/>
    <transponder frequency="3999000" symbol_rate="2960000" polarization="1" fec_inner="3" system="0" modulation="1"/>
    <transponder frequency="4055000" symbol_rate="11000000" polarization="0" fec_inner="1" system="1" modulation="1"/>
    <transponder frequency="4099000" symbol_rate="30000000" polarization="1" fec_inner="7" system="1" modulation="1"/>
    <transponder frequency="4163000" symbol_rate="2644000" polarization="1" fec_inner="3" system="1" modulation="1"/>
</sat>
<sat name="AMC 8/18 (139.0W)" flags="0" position="-1390">
    <transponder frequency="4056000" symbol_rate="13250000" polarization="0" fec_inner="3" system="0" modulation="1"/>
</sat>
<sat name="AMC 10 (135.0W)" flags="0" position="-1350">
    <transponder frequency="3780000" symbol_rate="30000000" polarization="0" fec_inner="3" system="1" modulation="2"/>
    <transponder frequency="3820000" symbol_rate="29270000" polarization="0" fec_inner="3" system="0" modulation="1"/>
    <transponder frequency="4080000" symbol_rate="29270000" polarization="1" fec_inner="3" system="0" modulation="1"/>
    <transponder frequency="4136000" symbol_rate="19510000" polarization="0" fec_inner="3" system="0" modulation="1"/>
    <transponder frequency="4149000" symbol_rate="9760000" polarization="0" fec_inner="3" system="0" modulation="1"/>
    <transponder frequency="4180000" symbol_rate="29270000" polarization="0" fec_inner="5" system="0" modulation="1"/>
</sat>
</satellites>

我让用户选择卫星,然后我必须获得所选卫星的可用频率。第一部分我做了,但现在我无法通过 name 属性获取 sat 元素来显示转发器频率列表和其他信息。

这是我的代码:var satellitesData = fileData.find('sat[name='+satName+']');

也试过这个:var satellitesData = $(fileData).find('sat[name='+satName+']');

这个:var satellitesData = fileData.find('sat[name='+satName+'] > transponder');

还有这个:var satellitesData = fileData.find('sat[name='+satName+']').innerHTML;

没有任何作用。我做错了什么?

最佳答案

由于您要查找的name属性中经常包含空格,因此需要将查找到的属性用引号括起来,否则语法无效。在标准 Javascript 中使用 querySelector 而不是 .find(.find 适用于 jQuery,或普通 Javascript 数组,但不适用于 Javascript HTMLElements)。

const satName = "NSS 9/Yamal 300K (177.0W)";
const satellites = document.querySelector('satellites');
const satellitesData = satellites.querySelector('sat[name="' + satName + '"]');
console.log(satellitesData);
<satellites>
  <sat name="NSS 9/Yamal 300K (177.0W)" flags="0" position="-1770">
    <transponder frequency="3792000" symbol_rate="2048000" polarization="1" fec_inner="2" system="1" modulation="1" />
    <transponder frequency="3987000" symbol_rate="8950000" polarization="1" fec_inner="2" system="0" modulation="1" />
    <transponder frequency="3999000" symbol_rate="2960000" polarization="1" fec_inner="3" system="0" modulation="1" />
    <transponder frequency="4055000" symbol_rate="11000000" polarization="0" fec_inner="1" system="1" modulation="1" />
    <transponder frequency="4099000" symbol_rate="30000000" polarization="1" fec_inner="7" system="1" modulation="1" />
    <transponder frequency="4163000" symbol_rate="2644000" polarization="1" fec_inner="3" system="1" modulation="1" />
  </sat>
  <sat name="AMC 8/18 (139.0W)" flags="0" position="-1390">
    <transponder frequency="4056000" symbol_rate="13250000" polarization="0" fec_inner="3" system="0" modulation="1" />
  </sat>
  <sat name="AMC 10 (135.0W)" flags="0" position="-1350">
    <transponder frequency="3780000" symbol_rate="30000000" polarization="0" fec_inner="3" system="1" modulation="2" />
    <transponder frequency="3820000" symbol_rate="29270000" polarization="0" fec_inner="3" system="0" modulation="1" />
    <transponder frequency="4080000" symbol_rate="29270000" polarization="1" fec_inner="3" system="0" modulation="1" />
    <transponder frequency="4136000" symbol_rate="19510000" polarization="0" fec_inner="3" system="0" modulation="1" />
    <transponder frequency="4149000" symbol_rate="9760000" polarization="0" fec_inner="3" system="0" modulation="1" />
    <transponder frequency="4180000" symbol_rate="29270000" polarization="0" fec_inner="5" system="0" modulation="1" />
  </sat>
</satellites>

您可能会考虑模板文字:

const satellitesData = satellites.querySelector(`sat[name="${satName}"]`);

关于javascript - 无法使用它的属性获取 xml 元素的内部 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50922884/

相关文章:

JavaScript:设置 cookie 不起作用

javascript - 显式定义 Controller 参数时,默认模型绑定(bind)程序会崩溃

javascript - 函数仅在调用它的最新元素上运行

jquery - 隐藏输入字段的每个实例,但第一个

html - 文本输入字段中的单击-拖动-选择问题也会滚动父元素、webkit 错误或功能?

html - IE10 以不同于 Firefox 或 Chrome 的方式缩放图像

javascript - 更改悬停时的图像 React 重新渲染所有子项

javascript - 在 Fabric.js 中使用远程网络字体初始化加载文本

javascript - d3 对立图表 Axis 对齐问题

javascript - 数据表行中的固定字符