Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在变量中使用.each().find()和.text()_Javascript_Jquery_Xml_Find_Each - Fatal编程技术网

Javascript 在变量中使用.each().find()和.text()

Javascript 在变量中使用.each().find()和.text(),javascript,jquery,xml,find,each,Javascript,Jquery,Xml,Find,Each,在过去的几个小时里,我一直在努力解决这个问题,但我的头脑还没有完全清醒过来,所以我有以下功能: $("SPEECH",currentContext).each(function(){ var speaker = $("#selectSpeaker").val(); if($(this).find("SPEAKER").text()===speaker){ var line = $(this).find("LINE").text();

在过去的几个小时里,我一直在努力解决这个问题,但我的头脑还没有完全清醒过来,所以我有以下功能:

$("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>");
        } 
    });
$(“语音”,currentContext)。每个(函数(){
var speaker=$(“#selectSpeaker”).val();
if($(this).find(“SPEAKER”).text()==SPEAKER){
var line=$(this.find(“line”).text();
$(“#演讲者”)。追加(“

”+演讲者+”

“+”“+行+”

”); } });
XML标记为:

我正在做的是通过XML拉入信息,例如
&
语音
,它几乎工作得很好,它找到了所选的
说话人
,找到了与说话人相关的
,并将其输出。然而,我发现XML中一行中的任何
,都被放在一个长段落中,而不是一个新段落中(就像我想要的那样)。通过这样做,对于一行中的行,在一行的结尾和下一行的开头之间没有空格,因此行的起始字和结束字连接在一起

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

任何帮助都将不胜感激


提前谢谢。

你提到的基本上是正确的。如果
$(this).find(“LINE”)
返回多个项目,那么当调用
text()
时,文本将连接在一起。如果您想单独处理每一项,可以使用
每一项

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);
var-lines=$(this).find(“LINE”).map(函数(){
返回“”+$(this.text()+”

”; }).get().join(“”); $(“#演讲者”).append(“

”+演讲者+”

“+行);
.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(""));
    } 
});
$(“语音”,currentContext)。每个(函数(){
var speaker=$(“#selectSpeaker”).val();
if($(this).find(“SPEAKER”).text()==SPEAKER){
//将其视为数组,并为每行返回一个新段落:
变量行=$.makeArray(
$(this.find(“LINE”).map(函数(){return“”+$(this.text()+”

“;}) ); $(“#演讲者”).append(

“+speaker+”

“+lines.join(”)); } });

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

这实际上不起作用。在一个each内返回实际上只是用来打破循环或继续。不幸的是@JamesMontagne是对的,朋友,它不起作用,谢谢你的输入!我试过了,但没有成功,不知道我是否错过了什么可能?现在就试试地图!如line/lines一样不管怎样,我改变了它。不,行只是我命名的变量。它不应该在最后有
text()
。我更新了它。哈哈,睡眠不足让我变傻了,反正我也试过了,但没有任何区别(不太清楚为什么).无论如何,
map
方法非常有效,伙计,非常感谢,它整天都在烦我!