我有这个xml文档。
<search-results>
<physician>
<name>some name</name>
<address>
<street>some street</street>
<city>some city</city>
<state>some state</state>
<zip-code>some zip</zip-code>
</address>
<phone>some phone</phone>
<url>some url</url>
<logos>
<logo type="1">logo1</logo>
<logo type="2">logo2</logo>
</logos>
</physician>
</search-results>
我可以使用此代码列出具有类型1徽标的医生。
$(results).find('physician').each(function () {
var $physician = $(this);
var logos = $physician.children('logos');
var logo = logos.children('logo');
if (logo.attr('type') == "1")
{
var html = '<h3>' + $physician.children('name').text() + '</h3>';
html += '<p>' + $physician.children('logos').children('logo').text() + '</p>';
html += '<p>' + logo.attr('type') + '</p>';
$('#results').append(html);
}
});
然而,并非所有医生都有这两个标志。
我需要能够列出身份标识为1的医生,身份标识为2的医生,以及具有这两个标识的医生。我很难找到同时拥有标识1和标识2的医生。任何人都可以指出我正确的方向吗?
答案 0 :(得分:1)
如果您特别需要按照您给出的特定顺序(徽标1,日志2,然后两者)查找和输出医生,那么您最好的选择是预先计算每种类型医生的清单,然后在其中进行迭代。你需要的订单。
例如,你可以这样做:var physicians = $(results).find('physician');
var logo1 = physicians.filter(function ( ) {
return $('logo[type="1"]', this).length > 0;
});
var logo2 = physicians.filter(function ( ) {
return $('logo[type="2"]', this).length > 0;
});
var physiciansWithLogo1 = logo1.not(logo2);
var physiciansWithLogo2 = logo2.not(logo1);
var physiciansWithBothLogos = logo1.filter(logo2);
前两个过滤器表达式使用filter functions来选择分别具有type="1"
和type="2"
徽标的医生(无论他们是否同时具有这两种类型)。
接下来的两行使用not filter来选择只有一种或另一种徽标的医生。这些变量放在physiciansWithLogo1
和physiciansWithLogo2
变量中,这些变量是包含仅logos
分别具有type="1"
和type="2"
的医生的jQuery对象。
最后一行再次使用filter查找包含两种徽标的医生,这些徽标放入jQuery对象physiciansWithBothLogos
。
一旦你拥有了这三个对象,就可以迭代它们(例如,使用each()
)并根据需要构建输出。