代码之家  ›  专栏  ›  技术社区  ›  Dav.id

jquery:将XML节点映射到HTML ID元素

  •  3
  • Dav.id  · 技术社区  · 16 年前

    不要轻易地把要说的话写在标题里…但现在我们开始…

    我意识到,我可能会直接看到jquery明显的、可能内置的功能。

    我想做的是:

    1. 使XML文件(本地或通过服务器)包含恰好具有其 节点名,即HTML文本框的ID名 即

    2. 然后,我想通过jquery-ajax调用,解析XML并映射节点的值。 到相同节点名的HTML ID元素的值…

    我马上意识到有a)可能是插件,b)可能是更好的概念,但我只需要映射到基本的HTML元素。实际上,从技术上讲,我可以有一些更高级的特性来填充,比如组合框、单选按钮等等。

    有什么想法可以走吗?或者如果有一个简单的jquery插件来做这个?

    P.S:我不喜欢这样的模板,因为即使我意识到了JTemplates的威力,我也不需要像那样复杂/灵活的东西……

    事先谢谢!你说什么?

    4 回复  |  直到 16 年前
        1
  •  2
  •   K Prime    16 年前

    试试这个:

    $.get ('/path/to/xml', function (data)
    {
        $(data).children ().each (function ()
        {
            $('#' + this.nodeName).val ($(this).text());
        });
    })
    

    假设XML中只有1级嵌套。

        2
  •  3
  •   Gabriele Petrioli    16 年前

    这应该可以帮助您开始XML分析。

    var xml = '<root><text1>i am in text1</text1><text2>i am in text2</text2></root>';
    $(xml)
          .children()
          .each(
                function(){
                           alert(this.nodeName + ':' + $(this).text());
                          }
               );
    

    nodename是XML中的标记名,将用作HTML的ID。 jquery文本方法将返回XML节点的值。(仅文本)

    要加载XML文件,请使用

    $.get( 
          '/path/to/filename.xml', 
          function(){ 
                     /*runs on success, do the parsing here*/
                    },
          'xml'
         ); 
    
        3
  •  0
  •   Dav.id    16 年前

    实际上很好的投入,谢谢大家的帮助。这让我走了。

    再一次,我意识到有模板引擎,但我的下一步是建立一个更复杂的,能够说填充一个组合框,单选按钮等。只是HTML的基础知识……因为我用的是 DHTMLX components 做任何花哨的事……主要是因为它们似乎有我发现的最容易理解的javascript小部件。我知道extjs正在追赶更好的docco、更简单的api等。

    总之,我将:

    1. 整个系统中名为相同的数据库中的字段。所以如果数据库字段 称为firstname,则html元素将称为firstname
    2. 在我从数据库创建的XML中,我将添加类似“element type”的属性 它可以是文本、无线电、组合或其他,所以我知道如何填充这些值。
    3. 然后,javascript/jquery可以完成显示数据所需的工作。

    所有这些的主要原因是我的合作伙伴可以将页面/布局设计为纯HTML,而不用担心XSLT/模板…简单的数据被填充…

    我确信一定有一些“引擎/插件”在外面。但现在我要努力…

    再次感谢…

        4
  •  0
  •   dkinzer    16 年前
    $(xml).find('foo').each( function() {
      alert (this.text());
    });