【问题标题】:e4x filter on more than one children?e4x 过滤多个孩子?
【发布时间】:2010-05-19 08:36:53
【问题描述】:

我的 XML 看起来像这样:

<?xml version="1.0" encoding="utf-8" ?>
<projects>
    <project 
        id="1"
        thumb="media/images/thumb.jpg"
        >
        <categories>
            <id>1</id>
            <id>2</id>
        </categories>
        <director>Director name</director>
        <name><![CDATA[IPhone commercial]]></name>
        <url><![CDATA[http://www.iphone.com]]></url>
        <description><![CDATA[Description about the project]]></description>
        <thumb><![CDATA[/upload/images/thumb.jpg]]></thumb>
    </project>
</projects>

但我不知道如何根据类别 ID 过滤项目?有人知道该怎么做吗? :)

类似:

projects.project.(categories.(id == 3))

只返回所有项目:(

【问题讨论】:

    标签: javascript e4x


    【解决方案1】:

    这是一种不使用任何自定义函数的更好方法:

    projects.project.(categories.id.contains(1))
    

    contains 采用单个值来检查 XML 或 XMLList 对象。


    您可以使用额外的函数来进行处理:

    // check if any of the <id> nodes matches any of the given values
    function containing(nodes, values) {
        for each(var id in nodes) {
            if(values.indexOf(parseInt(id)) !== -1) return true;
        }
        return false;
    }
    
    projects.project.(containing(categories.id, [1])); // matches the first project
    projects.project.(containing(categories.id, [46])); // matches nothing
    

    【讨论】:

    • Awesome thx :) 效果很好,但希望 e4x 对这种查询有一些原生支持。
    • 不客气。有一个更好的方法不使用任何功能..更新了答案。
    【解决方案2】:

    它应该是projects.project..(id==3) 双点会跳过任何节点,但如果您有更多的 id,这是一个问题。

    现在,如果我在 actionScript 中执行此操作,这是我所有 e4x 知识的来源,我会执行此操作 projects.project.containing.(id==3).parent() 我不确定 JS 是否支持该父方法,或者它是否有它自己的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2011-09-13
      • 2018-09-22
      • 2012-11-11
      • 2014-10-31
      • 1970-01-01
      • 2014-03-12
      相关资源
      最近更新 更多