2

私は過去数時間これを理解しようとしていて、頭を回すことができないので、私は次の機能を持っています:

$("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などの情報を取得LINEすることです。SPEECHこれはほぼ完全に機能しており、選択されたSPEAKERものを見つけLINE、スピーカーに関連付けられているを見つけて出力します。ただしLINE、XMLの行にあるすべての段落が、それぞれの新しい段落ではなく、1つの長い段落に配置されていることがわかりました(私が望むように)。これにより、一列に並んだ行については、ある行の終わりと次の行の始まりの間にスペースが入れられないため、行の開始語と終了語が結合されます。

私の知る限り、これは個々の行を検索しないことであると言えるので、.each()変数内で使用することでこれを解決できると思いますが、機能させることはできないようです。

どんな助けでも大歓迎です!

前もって感謝します。

4

2 に答える 2

5

あなたが言ったことは基本的に正しいです。$(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);
于 2012-05-02T03:41:16.587 に答える
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を呼び出す必要があります。:(残念ながらそれほど単純ではありません。

于 2012-05-02T03:43:24.063 に答える