背景知识:我使用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值的源节点。我找不到一个简单的jQuery选择器可以做到这一点。在XSLT中,我做的是<xsl:variable name="afterTaxSources" select="SOURCE[TYPE = 'AfterTax']"/>
。JQuery的等价物是什么?
发布于 2011-06-28 00:33:01
我只是偶然发现了这个,它似乎起作用了:
var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"))');
有没有人看到它不会的原因?
更棒的是,我可以使用以下命令组合多种类型
var pretaxSources = $(qpPlanNode).find('SOURCE:has(TYPE:contains("PreTax"),TYPE:contains("Employee"))');
发布于 2011-06-28 00:24:57
我可能会使用.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()就是你要找的。
https://stackoverflow.com/questions/6500355
复制