一点背景:我使用XSLT在页面上呈现了一些XML,但我们决定使它更具交互性,所以现在我正在进行jQuery.ajax调用以返回XML,我正在解析它的JavaScript。
我已经能够使用像
之类的代码从中提取特定节点var qpPlanNode = $(xml).find('MyNode');
var qpPlanNum = $(qpPlanNode).children('PLANNUM').text();
然后将计划编号转换为qpPlanNum。但在那个XML中我有类似
的东西<xml>
<MyNode>
<PLANNUM>123</PLANNUM>
<SOURCE>
<TYPE>PreTax</TYPE>
<AMOUNT>1234</AMOUNT>
</SOURCE>
<SOURCE>
<TYPE>AfterTax</TYPE>
<AMOUNT>456</AMOUNT>
</SOURCE>
<SOURCE>
<TYPE>PreTax</TYPE>
<AMOUNT>234</AMOUNT>
</SOURCE>
</MyNode>
</xml>
我想提取所有具有TYPE特定值的SOURCE节点。我找不到一个简单的jQuery选择器,它会做到这一点。在XSLT中,我正在做<xsl:variable name="afterTaxSources" select="SOURCE[TYPE = 'AfterTax']"/>
。什么是JQuery等价物?
答案 0 :(得分:1)
我可能会使用.parseXML()
var xml = "<xml><MyNode><PLANNUM>123</PLANNUM> <SOURCE> <TYPE>PreTax</TYPE> <AMOUNT>1234</AMOUNT> </SOURCE> <SOURCE> <TYPE>AfterTax</TYPE> <AMOUNT>456</AMOUNT> </SOURCE> <SOURCE> <TYPE>PreTax</TYPE> <AMOUNT>234</AMOUNT> </SOURCE> </MyNode></xml>"
xmlDoc = $.parseXML(xml)
$xml = $(xmlDoc)
$source = $xml.find('TYPE:contains("AfterTax")').parent();
console.log($source);
<强>替代地强>
但是,我无法在实例中正常使用
console.log($('TYPE:contains("AfterTax")').parent('source'));
应该这样做,但是,我无法让jsfiddle工作。它会继续将<MyNode>
视为父级,
$('TYPE:contains("AfterTax")').css('text-decoration', 'underline');
按预期工作,我会在jsfiddle以外的地方尝试这个。
我认为.parseXML()和:contains()正是您所寻找的。 p>
答案 1 :(得分:1)
我偶然发现了这个,看起来它正在起作用:
var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"))');
有人看到任何理由不这样做吗?
更好的是,我可以使用
组合多种类型var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"),TYPE:contains("Employee"))');