如何在不使用jQuery find()的情况下优雅地读取这个DOM对象元素?

时间:2014-01-20 15:07:25

标签: javascript jquery html xml dom

我得到了一些xml数据,将其解析为dom对象,以便我可以使用jQuery搜索和获取值。

这样的事情:

<field>
    <name>Jesus</name>
    <group>God</group>
    <blah>Hello World</blah>
</field>

在我的js中,我使用each()遍历字段:

data.find('field').each(function() {
    $(this).find("group").text();
}

我可以使用find()来获取每个字段和内容,但我不想使用find,因为它可能会变得昂贵。我查看了jQuery API,我不认为我有一个函数可以让我做一些像“getElement('name')”或children('name')next('name')等...

由于可读性和潜在的未来变化,我不想使用$(this)[0].childNodes[0]之类的索引。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我会给你一个完全不使用jQuery的答案!怎么样?

您的问题似乎是在搜索XML结构。所以你将它转换为DOM树,但现在你担心遍历树的性能问题。

解决方案很简单:不要将XML转换为HTML,将其转换为JavaScript对象文字,并使用它。它将是最简单和最有效的。有关将XML转换为对象文字的参考:XML to JavaScript Object

现在,您可以自由使用JavaScript提供的所有工具来处理数据,并避免任何jQuery / DOM效率问题。

答案 1 :(得分:0)

  


    function alertit(jqueryObject) {
      if (jqueryObject.length === 0) return;

      jqueryObject.each(function() {
          alert(this.nodeName.toLowerCase());
      });

      alertit(jqueryObject.children());
    }

    alertit($(xml));

答案 2 :(得分:0)

也试试这个

var xmlData = "<field><name>Jesus</name><group>God</group><blah>Hello World</blah></field>";
$(document).ready(function () {
    var data = $.parseXML(xmlData);
    $(data).each(function (i, node) {
        alert($(node).text());
    });
});