2014-12-19 18 views
0

這從昨天下午以來一直讓我瘋狂。我試圖使用jQuery的「add」方法連接兩個選定HTML的主體。我顯然缺少一些根本性的東西。下面是說明問題的一些示例代碼:jQuery「添加」只評估當「appendTo」被稱爲

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
</head> 
<body> 
    <p id="para1">This is a test.</p> 
    <p id="para2">This is also a test.</p> 

    <script> 
     var para1 = $("#para1").clone(); 
     var para2 = $("#para2").clone(); 

     var para3 = para1.add(para2); 

     alert("Joined para: " + para3.html()); 

     para3.appendTo('body'); 

    </script> 
    </body> 
</html> 

我需要追加前做更多的操作,以「para3各個」,但上面顯示的警報只是內容「PARA1。」然而,「appendTo追加正確的,‘補充’PARA1和PARA2的內容(隨後頁面上出現)。

任何想法是怎麼回事?

+1

閱讀['$ .add'](http://api.jquery.com/add/)(和'$ .html')文檔。 $ para3是* two *元素的jQuery選擇器。 – user2864740

回答

1

按照該$.add

加入到匹配的元素集合的元素創建一個新的jQuery對象。

因此,add後,$ para3各個代表一個jQuery結果集兩個元素〜> [$ para1,$ para2]。然後,每$.html

獲取第一元件的HTML內容集合中匹配的元素或設置每個匹配的元素的HTML內容。

所以第一項目的jQuery的結果($ PARA1)的HTML內容被返回和隨後的元素(包括$ PARA2)被忽略。這種行爲在jQuery的「值讀取」功能中是一致的。

閱讀$.appendTo將解釋它的工作原理與$.html不同。


一個簡單的地圖和陣列CONCAT可用於獲取的「在結果集中的所有項目」的HTML:

$.map($para3, function (e) { return $(e).html() }).join("") 

Array.prototype.map.call($para3, function (e) { return $(e).html() }).join("") 

或在這種情況下,只需:

$para1.html() + $para2.html() 

另一種方法是在添加子項之後獲取父項的內部HTML 元素