过去几个小时我一直试图解决这个问题而无法理解它,所以我有以下功能:
$("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
我正在做的是提取LINE
&amp;等信息。 SPEECH
通过XML,它几乎完美地工作,找到所选的SPEAKER
,找到与发言者关联的LINE
并输出它们。但是我发现XML中连续的任何LINE
都被放入1个长段而不是每段新段(就像我想要的那样)。通过这样做,对于一行中的行,在一行的末尾和下一行的开头之间没有放置空格,因此行的开始和结束单词被连接在一起。
据我所知,我可以说这不是为了找不到每一行,所以我的想法是在变量中使用.each()
可以解决这个问题,但是我似乎无法让它工作。
任何帮助将不胜感激!
提前致谢。
答案 0 :(得分:4)
你提到的基本上是正确的。如果$(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);
答案 1 :(得分:0)
.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。 :(不幸的是不是那么简单。