【问题标题】:using .each() .find() and .text() in a variable在变量中使用 .each() .find() 和 .text()
【发布时间】:2012-05-02 03:37:29
【问题描述】:

过去几个小时我一直在尝试解决这个问题,但我无法理解它,所以我有以下功能:

$("SPEECH",currentContext).each(function(){
        var speaker = $("#selectSpeaker").val();
        if($(this).find("SPEAKER").text()===speaker){
            var line = $(this).find("LINE").text();

            $("#speakers").append("<p class='speech'>" + speaker + "</p>" + "<p>" + line + "</p>");
        } 
    });

XML 标记如下:http://pastebin.com/GhesMcay

我正在做的是通过 XML 提取诸如 LINESPEECH 之类的信息,并且它工作得几乎完美,它找到了选定的 SPEAKER,找到了与扬声器关联的 LINE 和输出它们。但是,我发现 XML 中连续的任何 LINE 都被放入 1 个长段落中,而不是每个段落的新段落中(就像我想要的那样)。通过这样做,对于连续的行,在一行的结尾和下一行的开头之间没有空格,因此行的开头和结尾字被连接在一起。

据我所知,我可以说这归结为不寻找每一行,所以我的想法是在变量中使用 .each() 可以解决这个问题,但是我似乎无法让它工作。

任何帮助将不胜感激!

提前致谢。

【问题讨论】:

    标签: javascript jquery xml find each


    【解决方案1】:

    你所说的基本正确。如果$(this).find("LINE") 返回多个项目,那么当您调用text() 时,文本将被连接在一起。如果你想对每一个单独做一些事情,你可以使用each

    var lines = $(this).find("LINE");
    
    lines.each(function(){
       var singleLine = $(this);
    
       // do something here
    });
    

    编辑:另一种选择是使用map

    var lines = $(this).find("LINE").map(function(){
        return "<p>" + $(this).text() + "</p>";
    }).get().join("");
    
    $("#speakers").append("<p class='speech'>" + speaker + "</p>" + lines);
    

    【讨论】:

    • 我试过pastebin.com/J072RsGa但没有成功,不知道我是否错过了什么?现在将尝试地图!
    • 在行/行中?反正我改了。
    • 不,lines 就是我为变量命名的。最后不应该有text()。我更新了。
    • 哈哈睡眠不足让我很笨,我也试过了,但没有任何区别(不太清楚为什么)。无论如何,map 方法非常有效,非常感谢,它一直困扰着我!
    【解决方案2】:

    .find(...) 可能会返回一个项目数组。你应该映射它们:

    $("SPEECH",currentContext).each(function(){
        var speaker = $("#selectSpeaker").val();
        if($(this).find("SPEAKER").text()===speaker){
    
            // treat this like an array, and return a new paragraph for each line:
            var lines = $.makeArray(
                $(this).find("LINE").map(function() { return "<p>" + $(this).text() + "</p>"; })
            );
    
            $("#speakers").append("<p class='speech'>" + speaker + "</p>" + lines.join(""));
        } 
    });
    

    编辑:忘记了 .map() 是具有返回值的那个......然后你必须调用 .makeArray。 :( 不幸的是没有那么简单。

    【讨论】:

    • 这实际上行不通。在 each 中返回实际上只是用于跳出循环或继续。
    • 不幸的是,@JamesMontagne 是正确的朋友,但它不起作用,但感谢您的输入!
    猜你喜欢
    • 2018-12-13
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多