JQuery append()不会追加

时间:2015-05-21 12:09:38

标签: javascript jquery html append

我有这样的html结构:

<div id="things">
    <div class="whatever">
        <div class="frame">content</div>
        <div class="frame">content</div>
        <div class="frame">content</div>
    </div>
</div>

我使用JQuery脚本获得JS,该脚本可以在该页面上点击按钮:

function intsaver(){

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "intsaver.php", true);
    var tosf = $('<div></div>');
    $("#things").find(".frame").each(function(){
        tosf.append($(this).innerHTML);
        alert(''+tosf);
    });
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("data=" + tosf.innerHTML);
}

我可以在调试器中看到this内容,它们正是我正在寻找的内容。但tosf仍为undefined,而在服务器端,我收到undefined

我尝试了一些方法,例如,我自己添加了this。结果,div从页面上消失了,但tosf仍然是undefined

我相信我犯了一些明显的错误。

4 个答案:

答案 0 :(得分:3)

更改

updateTexture

tosf.append($(this).innerHTML);

 tosf.append($(this).html());//$(this) a jQuery object

tosf.append(this.innerHTML);//this a dom object $(this) 而不是 jQuery object ,其中没有属性 dom object 。请改用 innerHTML

答案 1 :(得分:2)

尝试

$aFilter = Array(
            'pages' => 1,
            'photo' => 1,
            'link' => 1,
            'event' => 1,
            'friend' => 1,
            'user_status' => 1,
            'poll' => 1,
            'quiz' => 1,
            'market' => 1,
            'apps' => 1
        );
        print_r($aFilter);

答案 2 :(得分:2)

function intsaver() { var xmlhttp = new XMLHttpRequest(); xmlhttp.open("POST", "intsaver.php", true); var tosf = $('<div></div>'); $("#things").find(".frame").each(function () { tosf.append(this.innerHTML); //innerHTML is a property dom element alert('' + tosf); }); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send("data=" + tosf.html()); //tosf is a jQuery object os call .html() } 应为$(this).innerHTML$(this).html();应为tosf.innerHTML

原因为tosf.html()tosf jQuery 样式,$(this)为纯 javascript

答案 3 :(得分:2)

更多解释'为什么.innerHTML'不起作用。 正如答案中所述,$(this).innerHTML不起作用,因为jQuery没有该属性。但是,如果您调整代码,您也可以从.innerHTML中受益。如果使用$(element)包装元素,则会创建特定于jQuery的对象,如果要使用.innerHTML,则需要从中获取元素:$(this)[0].innerHTML。由于this只是该jQuery数组中的元素,this.innerHTML就足够了,而不是$(this)。所以你的代码可以是:

function intsaver(){

var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "intsaver.php", true);
var tosf = $('<div></div>');
$("#things").find(".frame").each(function(){
    tosf.append(this.innerHTML);
    alert(''+tosf);
});
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("data=" + tosf[0].innerHTML);}