0

我正在尝试li使用 JQuery 附加来自 php 文件的元素。问题是html代码需要根据键值分别附加到不同的html ID。不幸的是,据我所知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));

现在,如果 counter 是偶数<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,它是您的浏览器。为了呈现网页,它需要有一个有效的 HTML DOM,它会尝试为您修复错误。

使用大 obj 时,您正在做的事情会非常慢,因为每次追加后,整个页面都将被重新创建(意味着必须重新计算每个宽度/高度/位置)。(谷歌 javascript 重排/重绘)

最好的办法是先创建完整的 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 回答