2009-10-05 16 views
125

Làm thế nào tôi có thể sử dụng .append() với hiệu ứng như show('slow')jQuery bằng cách sử dụng thêm với các hiệu ứng

hiệu ứng Có trên append dường như không làm việc ở tất cả, và nó cung cấp cho các kết quả tương tự như bình thường show(). Không chuyển tiếp, không có hoạt ảnh.

Làm cách nào để nối một div này với div khác và có hiệu ứng slideDown hoặc show('slow') trên đó?

Trả lời

169

Có hiệu ứng khi thêm vào sẽ không hoạt động vì nội dung mà trình duyệt hiển thị được cập nhật ngay sau khi div được thêm vào. Vì vậy, để kết hợp các câu trả lời của Mark B và Steerpike:

Kiểu div bạn đang thêm vào bị ẩn trước khi bạn thực sự thêm nó. Bạn có thể làm điều đó với inline hoặc kịch bản CSS bên ngoài, hoặc chỉ cần tạo div như

<div id="new_div" style="display: none;"> ... </div> 

Sau đó bạn có thể tác động dây chuyền đến append của bạn (demo):

$('#new_div').appendTo('#original_div').show('slow'); 

Hoặc (demo):

var $new = $('#new_div'); 
$('#original_div').append($new); 
$new.show('slow'); 
+5

có lẽ là kiểu nội tuyến, thêm một lớp css như "ẩn" tương đương với display: none is .. "classier" (baddoom tsh);) – dmp

+29

@danp: http://www.sadtrombone.com –

+2

Điều này đã thắng ' t làm việc. Khi bạn sử dụng chắp thêm, nó sẽ trả về original_div không phải là phần tử mới được nối thêm. Vì vậy, bạn đang thực sự gọi hiển thị trên vùng chứa. – Vic

4

Đặt div được nối thêm để ẩn ban đầu qua css visibility:hidden.

12

Cái gì như:

$('#test').append('<div id="newdiv">Hello</div>').hide().show('slow'); 

nên làm điều đó?

Chỉnh sửa: xin lỗi, sai mã và đề xuất của Matt trên diễn đàn.

+1

Không chắc chắn nếu điều đó sẽ làm những gì anh ta muốn, nhưng nếu có, bạn sẽ chuỗi các chức năng: '$ ('# divid'). Append ('# newdiv'). Hide(). Show ('slow') '. –

+0

Nó hoạt động; bit #newdiv là sai và bạn nói đúng, bạn có thể xâu chuỗi chúng. Tôi đã chỉnh sửa câu trả lời của tôi ngay bây giờ. –

+0

Đây là cách tiếp cận dễ nhất. Hoạt động tốt. – Cybernetic

107

Bản chất là thế này:

  1. Bạn đang gọi điện thoại 'append' trên mẹ
  2. nhưng bạn muốn gọi 'show' trên con mới

này làm việc cho tôi:

var new_item = $('<p>hello</p>').hide(); 
parent.append(new_item); 
new_item.show('normal'); 

hay:

$('<p>hello</p>').hide().appendTo(parent).show('normal'); 
+1

Tôi nhận ra điều này là 3.5 năm nay, nhưng đó là một câu trả lời khéo léo tôi chỉ cần bỏ phiếu và bình luận. Làm tốt! – hannebaumsaway

+1

Tôi đã thử cả hai cách này và nó không hoạt động. Không có hiệu ứng trượt mượt mà trên nội dung được thêm vào. – Chris22

+0

''normal'' không phải là chuỗi thích hợp cho tốc độ. để trống để không chuyển đổi (xuất hiện ngay lập tức). sử dụng chuỗi ''fast'' cho 200ms hoặc'' slow'' cho 600ms. hoặc nhập bất kỳ số nào như '$ (" phần tử "). hiển thị (747)' (= 747ms) để xác định tốc độ của riêng nó. xem [docs] (https://api.jquery.com/show/) và tìm hoạt ảnh/thời lượng. – honk31

18

Một cách khác khi làm việc với dữ liệu đến (như từ cuộc gọi ajax):

var new_div = $(data).hide(); 
$('#old_div').append(new_div); 
new_div.slideDown(); 
3

Tôi đang cần một loại tương tự của giải pháp, muốn thêm dữ liệu vào một bức tường như facebook, khi đăng tải, sử dụng prepend() thêm bài viết mới nhất trên đầu, suy nghĩ có thể có ích cho những người khác ..

$("#statusupdate").submit(function() {  
      $.post(
      'ajax.php', 
      $(this).serialize(), 
      function(data){ 

       $("#box").prepend($(data).fadeIn('slow'));     
       $("#status").val(''); 
      } 
     ); 
      event.preventDefault(); 
     }); 

mã trong ajax.php là

if (isset($_POST)) 
{ 

    $feed = $_POST['feed']; 
    echo "<p id=\"result\" style=\"width:200px;height:50px;background-color:lightgray;display:none;\">$feed</p>"; 


} 
1

Tại sao bạn không chỉ đơn giản là che giấu, thêm, sau đó hiển thị, như thế này:

<div id="parent1" style=" width: 300px; height: 300px; background-color: yellow;"> 
    <div id="child" style=" width: 100px; height: 100px; background-color: red;"></div> 
</div> 


<div id="parent2" style=" width: 300px; height: 300px; background-color: green;"> 
</div> 

<input id="mybutton" type="button" value="move"> 

<script> 
    $("#mybutton").click(function(){ 
     $('#child').hide(1000, function(){ 
      $('#parent2').append($('#child')); 
      $('#child').show(1000); 
     }); 

    }); 
</script> 
7

Khi bạn thêm vào các div, hide nóhiển thị nó với đối số "slow".

$("#img_container").append(first_div).hide().show('slow'); 
0

Có thể hiển thị trơn tru nếu bạn sử dụng Hoạt ảnh. Trong kiểu chỉ cần thêm "hoạt hình: hiển thị 1" và toàn bộ giao diện được ghi lại trong khung hình chính.

0

Trong trường hợp của tôi:

$("div.which-stores-content").append("<div class="content">Content</div>); 
$("div.content").hide().show("fast"); 

bạn có thể điều chỉnh css của bạn với visibility: hidden -> visibility: nhìn thấy và điều chỉnh các hiệu ứng chuyển tiếp vv chuyển: tầm nhìn 1.0s;