Làm cách nào để thêm display: inline-block trong hàm jQuery show ()?


158

Tôi có một số mã như thế này:

function switch_tabs(obj) {
    $('.tab-content').hide();
    $('.tabs a').removeClass("selected");

    var id = obj.attr("rel");
    $('#' + id).show();
    obj.addClass("selected");
}

Các chức năng hiển thị thêm display:block. Nhưng tôi muốn thêm display:inline-blockthay vì chặn.


1
Bạn sẽ cần cung cấp thêm một số chi tiết. Nó hoạt động với tôi trong một bài kiểm tra nhanh: jsfiddle.net/DD3Sf .
Gijs

@gijs Xin lỗi, nó đang hoạt động. Tôi nghĩ rằng một số vấn đề bộ nhớ cache của nó. Cảm ơn thời gian của bạn
Giri

Câu trả lời:


208

Thay vì show, hãy thử sử dụng CSS để ẩn và hiển thị nội dung.

function switch_tabs(obj) {
    $('.tab-content').css('display', 'none'); // you could still use `.hide()` here
    $('.tabs a').removeClass("selected");
    var id = obj.attr("rel");

    $('#' + id).css('display', 'inline-block');
    obj.addClass("selected");
}

91
Điều này có vẻ rõ ràng, nhưng nếu bạn vẫn muốn sử dụng khía cạnh thời gian của show( $("#id").show(500)), chỉ cần nối thêm csschức năng vào nó:$("#id").show(500).css("display", "inline-block");
BenR

2
Tôi sẽ tiến thêm một bước nữa và xử lý tất cả các ẩn / hiển thị bằng các lớp CSS, không phải jQuery. $('.tab-content').addClass('hidden'); (...) $('#' + id).removeClass('hidden'); Trong CSS:.hidden { display: none !important }
Joe Maffei

10
Mặc dù đây là câu trả lời được chấp nhận nhưng nó không phản ánh những gì được nêu trong các tài liệu jquery : Điều này gần tương đương với việc gọi .css ("display", "block"), ngoại trừ thuộc tính hiển thị được khôi phục về bất cứ điều gì ban đầu. Nếu một phần tử có giá trị hiển thị của nội tuyến, sau đó bị ẩn và hiển thị, một lần nữa nó sẽ được hiển thị nội tuyến. Vì vậy, để có mặc định, displaybạn cần thêm một lớp trong css của mình display:inline-block;sau đó gọi hide()show()sử dụng id của phần tử. Đây là mã sạch hơn và dễ dự đoán hơn và dễ dàng tạo kiểu hơn.
Abdullah Adeeb

1
@AbdullahAdeeb vấn đề là bạn sẽ cần hide()bởi js khi tải trang. Cài đặt #element{display:inline-block;display:none;}không làm. Tôi nghĩ rằng giải pháp sạch nhất là $('#element').fadeIn().addClass('displaytype');- tốt hơn câu trả lời ở trên, bởi vì bạn có thể đặt các .displaytypes khác nhau trong css và có một chức năng hiển thị trong js. Xem câu trả lời của tôi tại đây: stackoverflow.com/questions/1091322/
Kiếm

36

Đặt thuộc tính CSS sau khi bạn đã sử dụng .show()sẽ hoạt động. Có thể bạn đang nhắm mục tiêu sai phần tử trên trang HTML của bạn.

 $('#foo').css('display', 'inline-block');

Nhưng nếu bạn không sử dụng bất kỳ hiệu ứng .show(), .hide()nào thì tại sao bạn không thiết lập các thuộc tính CSS đó theo cách thủ công như sau:

$('#foo').css('display','none'); 
$('#foo').css('display','inline-block');

3
Lưu ý rằng jquery hiển thị / ẩn / chuyển đổi khôi phục các giá trị hiển thị trước đó. Vì vậy, nếu bạn ẩn nó với jquery, gọi chương trình sẽ hoạt động.
Curtis Yallop

"Đặt thuộc tính CSS sau khi bạn đã sử dụng .show () sẽ hoạt động." Điểm của việc sử dụng show () là gì nếu bạn chỉ cập nhật thủ công css?
JSON

9

Sử dụng css () ngay sau show () hoặc fadeIn () như thế này:

$('div.className').fadeIn().css('display', 'inline-block');

5

Tôi đã làm điều đó

function showPanels()  {
    $('.panels').show("slow");
    $('.panels').css('display','inline-block');
}

hoạt động như một lá bùa.


7
Đó là một câu trả lời hay một sự thừa nhận ..?
NREZ

5

Giải pháp của Razz sẽ hoạt động cho các phương thức .hide().show()nhưng không hoạt động cho .toggle()phương thức.

Tùy thuộc vào kịch bản, có một lớp css .inline_block { display: inline-block; }và gọi $(element).toggleClass('inline_block')giải quyết vấn đề cho tôi.


2

Bạn có thể sử dụng animate insted của chương trình / ẩn

Một cái gì đó như thế này:

function switch_tabs(obj)
{
    $('.tab-content').animate({opacity:0},3000);
    $('.tabs a').removeClass("selected");
    var id = obj.attr("rel");

    $('#'+id).animate({opacity:1},3000);
    obj.addClass("selected");
}

2

thử cái này:

$('#foo').show(0).css('display','inline-block');

Cái show()này là vô nghĩa. Điều này giống như$('#foo').css('display','inline-block');
Liam

@Liam Không vô nghĩa. Bạn có thể thay đổi 0 để dễ dàng hoặc sửa đổi điều này để có quyền truy cập vào các showtùy chọn duy nhất khác .
JSideris

2

Tôi nghĩ rằng bạn muốn cả hoạt hình và đặt thuộc tính hiển thị ở cuối. Trong trường hợp đó, bạn nên sử dụng show()gọi lại như dưới đây

$("#my_obj").show(400,function() {
    $("#my_obj").css("display","inline-block")
}) ;

Bằng cách này bạn sẽ đạt được cả hai kết quả.


Điều này không chính xác, bạn chỉ kết thúc với inline-blockchế độ sau khi toàn bộ hoạt hình chạy. Điều đó có nghĩa là nó sẽ "bật" giữa blockinline-blocksau 400ms.
Alexis Wilke

1
<style>
.demo-ele{display:inline-block}
</style>

<div class="demo-ele" style="display:none">...</div>

<script>
$(".demo-ele").show(1000);//hide first, show with inline-block
<script>

0

thực tế jQuery chỉ đơn giản là xóa giá trị của thuộc tính 'display' và không đặt nó thành 'block' (xem triển khai bên trong của jQuery.showHide ()) -

   function showHide(elements, show) {
    var display, elem, hidden,

...

         if (show) {
            // Reset the inline display of this element to learn if it is
            // being hidden by cascaded rules or not
            if (!values[index] && display === "none") {
                elem.style.display = "";
            }

...

        if (!show || elem.style.display === "none" || elem.style.display === "") {
            elem.style.display = show ? values[index] || "" : "none";
        }
    }

Xin lưu ý rằng bạn có thể ghi đè $ .fn.show () / $. Fn. Leather (); lưu trữ hiển thị ban đầu trong chính phần tử khi ẩn (ví dụ như một thuộc tính hoặc trong $ .data ()); và sau đó áp dụng nó một lần nữa khi hiển thị.

Ngoài ra, sử dụng css quan trọng! có thể sẽ không hoạt động ở đây - vì thiết lập một kiểu nội tuyến thường mạnh hơn bất kỳ quy tắc nào khác


0

Tốt nhất .let nó là cha mẹ display :inline-blockhoặc thêm cha mẹ divnhững gì CSS chỉ có display :inline-block.


-5

Cách tốt nhất là thêm hậu tố quan trọng vào bộ chọn.

Thí dụ:

 #selector{
     display: inline-block !important;                   
}

3
Điều này không ngăn chặn. leather ()?
Kaan Soral

! quan trọng là chỉ cần thiết trong các trường hợp cạnh khi không có lựa chọn khác. Theo tôi, không phải là cách đúng đắn để tiếp cận vấn đề này khi nó có thể được sửa bằng mã jQuery tốt hơn.
Brandon

6
Điều quan trọng cần nhớ !importantlà không quan trọng khi sử dụng nó.
dùng1728278
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.