0

可以说我有一个 xml ..“xml2.xml”

<aurora>
<event> abc </event>
<event> abc </event>
<event> abc </event>
<event> 
<subeve> def </subeve>
<subeve> def </subeve>
<subeve> def </subeve>
</event>
<event> 
<subeve> def </subeve>
<subeve> def </subeve>
<subeve> def </subeve>
</event>
</aurora>

还有一个jquery代码..

<script>
$(document).ready(function () {
    $.ajax({
        type: "GET",
        url: "xml2.xml",
        dataType: "xml",
        success: xmlParser
    });
});
function xmlParser(xml) {
    $(xml).find("event").each(function () {

        $(".slides").append('<b>1');

        $(this).find("subeve").each(function () {
        $(".slides").append('<i>2</i>');
        });
        $(".slides").append('</b>');

    });
}
</script>


输出是:<b>1111</b><i>222</i><b>1</b><i>222</i>

但我希望输出是..:<b>1111<i>222</i>1<i>222</i></b>

我怎样才能做到这一点..??

我的第二个问题.. 我的第一个问题真的很傻吗?:-<

4

2 回答 2

3

您正在考虑标记(<b>然后是稍后</b>),但是一旦您处理 DOM 元素,您就是在处理对象,而不是标记。具体来说,当你这样做时$(".slides").append("<b>");,它会创建一个b元素并将其附加到slides. 它不会“打开”<b>标签。然后,当您稍后执行此操作时$(".slides").append("<i>2</i>");,它会创建一个i元素并将其附加到幻灯片,元素之后,b而不是在其中。我不知道 jQuery 做什么.append("</b>"),不要那样做。:-)

您可以构建元素并随时附加它们(将i元素附加到 each b,然后附加b.slides),或者构建一个标记字符串并.slides在完成后将其附加到。

第一个选项,构建元素,可能如下所示:

function xmlParser(xml) {
  var slides = $(".slides");

  $(xml).find("event").each(function () {

    var b = $("<b>").text("1");

    $(this).find("subeve").each(function () {
      b.append('<i>2</i>');
    });

    slides.append(b);
  });
}

实例| 来源

第二个选项,建立标记,可能如下所示:

function xmlParser(xml) {
  var markup = [];

  $(xml).find("event").each(function () {

    markup.push('<b>1');

    $(this).find("subeve").each(function () {
      markup.push('<i>2</i>');
    });

    markup.push('</b>');
  });

  $(".slides").append(markup.join(""));
}

实例| 来源

于 2012-12-29T08:47:16.460 回答
-1

如果您只想让所有内容都以粗体显示,请使用 CSS:

.slides{

    font-weight:bold;

} 

如果您想将 HTML 标记用于某些不同的目的,我强烈建议您使用某种形式的模板,而不是使用 jQuery 创建原始 HTML。

于 2012-12-29T08:48:10.180 回答