0

liJQueryを使用してphpファイルからの要素を追加しようとしています。問題は、HTMLコードをキー値に応じて異なるHTMLIDに個別に追加する必要があることです。残念ながら、私が理解したようにappend()、すべての要素を閉じた状態でのみ正しいhtmlを追加できます。それ以外の場合は、タグが自動的に閉じられます。次のコードは、のようなコードがdval含まれているため機能せず<div><li class="some">Some value</li>append()それから作成<div><li class="some">Some value</li></div>されます。append()それで、別の方法があるのではないかと思っていました。おそらく、 htmlパーツを追加できる以外の機能があるのでしょうか。

編集:

これは私のJqueryです:

$.getJSON("../ajax.php", function(data)
{
    $.each(obj, function(key,val)
    {
        $.each(obj[key], function(key, dval)
        {                       
            if(key == "text")
            {                   
                $("#" + key).append(dval);
            }           
        })          
    });
});

これは私のPHPです:

$json_arr = $json_arr."[";
if($counter % 2 == 0)
{
    $arr[0] = preg_replace('#<td class="some">(.*?)</td>#', '<li id="1234"><span class="some">$1</span>', $ja[0]);
}
else $ja[0] = preg_replace('#<td class="some">(.*?)</td>#', '<span class="some2">$1</span><div class="somediv"></div></li>', $ja[0]);

$json->id = $closest_key; // Closest key is the ID of an existing li element which is the closest to the current word
$json->text = $ja[0];
$json_arr = $json_arr.'{"id":"'.$json->id.'", "text":"'.addslashes($json->text).'"},';
$json_arr = substr($json_arr,0,-1);
$json_arr = $json_arr."]";
echo(json_encode($json_arr));

ここで、カウンターが偶数の場合<li id="1234"><span class="some">$1</span>はに追加する必要が$closest_keyあり、奇数の場合は追加する<span class="some2">$1</span><div class="somediv"></div></li>必要があります。

4

3 に答える 3

1

終了タグを追加しているのは実際にはjqueryではなく、ブラウザです。Webページをレンダリングするには、有効なHTML DOMが必要であり、エラーを修正しようとします。

追加するたびにページ全体が再作成されるため(つまり、すべての幅/高さ/位置を再計算する必要があるため)、大きなobj​​を使用すると実行が非常に遅くなります。(グーグルジャバスクリプトリフロー/リペイント)

最善の方法は、最初に完全なHTML文字列を作成してから、それを追加することです。

var html = {};
$.each(obj, function(key,val)
{
    $.each(obj[key], function(key, dval)
    {                       
        if(key == "text")
        {            
            if (html[key]==undefined)
              html[key] = "";

            html[key] += dval.toString();
        }           
    })          
}); 

$.each(html, function(key,val)
{
    $("#" + key).append(val);
}
于 2012-12-18T11:01:59.733 に答える
0

HTMLの文字列を作成してから、一度にすべてを追加する必要があります。

ここに例があります。

var html = '<div><ul>';

for(var i = 0; i < 10; i++){
    html += '<li>Test</li>';
}
html += '</ul></div>';
jQuery('#test').html(html);
于 2012-12-18T11:00:04.150 に答える
0

常にに追加して$('#text')いるので、文字列を作成して後で追加してみませんか?

var html = '';

$.each(obj, function(key,val) {
    $.each(obj[key], function(key, dval) {
        if(key == "text") { //the element being appended to is always #text anyway ?
            html += dval;
        }           
    });
});

$('#text').append(html);
于 2012-12-18T11:03:58.980 に答える