2009-08-04 42 views
83

Nếu tôi có những điều sau đây trong html của tôi:Làm cách nào để xóa tất cả các kiểu nội dòng bằng javascript và chỉ để lại các kiểu được chỉ định trong trang kiểu css?

<div style="height:300px; width:300px; background-color:#ffffff;"></div> 

Và điều này trong css style sheet của tôi:

div { 
    width:100px; 
    height:100px; 
    background-color:#000000; 
} 

Có cách nào, với javascript/jquery, để loại bỏ tất cả các phong cách nội tuyến và chỉ để lại các kiểu được chỉ định bởi biểu định kiểu css?

Trả lời

149

$('div').attr('style', '');

hoặc

$('div').removeAttr('style'); (Từ Andres's Answer)

Để làm nhỏ này một chút, hãy thử này:

$('div[style]').removeAttr('style');

này cần đẩy nó lên một chút vì nó kiểm tra xem các div có thuộc tính style hay không.

Dù bằng cách nào, quá trình này có thể mất một chút thời gian để xử lý nếu bạn có số lượng lớn div, vì vậy bạn có thể muốn xem xét các phương pháp khác ngoài javascript.

+0

Nếu nó phải loại bỏ thuộc tính kiểu, nó cũng sẽ phải tìm kiếm nó, vì vậy giải pháp cuối cùng có vẻ như chỉ làm cho mã mờ hơn. Điều tốt nhất tất nhiên là chỉ chọn các yếu tố bạn cần để xóa kiểu, thông qua ID có thể. –

+0

Điều này sẽ chỉ nhắm mục tiêu divs. Nếu bạn muốn nhắm mục tiêu mọi thứ thì sao? – streetlight

+1

Là một liên quan sang một bên, gọi '.css()' với một chuỗi rỗng làm giá trị thứ hai sẽ loại bỏ chỉ giá trị được đặt tên từ kiểu nội tuyến, ví dụ: $ ('div'). Css ('display', ''); sẽ chỉ xóa thuộc tính hiển thị nội tuyến (nếu được đặt). –

22
$('div').removeAttr('style'); 
+0

Điều này hiệu quả hơn làm attr ('style', '')? – Matt

+0

với $ ('div'). Attr ('style', '');

với $ ('div'). RemoveAttr ('style');
sạch hơn –

+0

có thể, bởi vì nó không được đặt thành giá trị rỗng, nhưng theo cách bạn sẽ có thời gian xử lý lớn vì nó phải đi qua từng div trong cơ thể. –

-2

Bạn cũng có thể thử liệt kê các css trong style sheet như! Important

+2

trong khi điều này sẽ hoạt động, thực hành khủng khiếp là chỉ ghi đè kiểu nội tuyến bằng! loại bỏ chúng – joshvermaire

3

Tôi đã sử dụng kỹ thuật $('div').attr('style', ''); và nó đã không làm việc trong IE8.

Tôi đã xuất thuộc tính kiểu bằng cách sử dụng alert() và nó không loại bỏ kiểu nội tuyến.

.removeAttr đã kết thúc thực hiện thủ thuật trong IE8.

18

Plain JavaScript:

Bạn không cần jQuery để làm điều gì đó tầm thường như thế này. Chỉ cần sử dụng phương thức .removeAttribute().

Giả sử bạn chỉ nhắm mục tiêu một yếu tố duy nhất, bạn có thể dễ dàng sử dụng như sau: (example)

document.querySelector('#target').removeAttribute('style'); 

Nếu bạn đang nhắm mục tiêu nhiều yếu tố, chỉ cần lặp qua các bộ sưu tập được lựa chọn của các yếu tố: (example)

var target = document.querySelectorAll('div'); 
Array.prototype.forEach.call(target, function(element){ 
    element.removeAttribute('style'); 
}); 

Array.prototype.forEach() - IE9 trở lên/.querySelectorAll() - IE 8 (một phần) IE9 trở lên.

+0

Một thay thế cho 'Array.prototype.forEach.call' là toán tử con trỏ được hỗ trợ khá tốt, tiết kiệm một dòng:' [... document.querySelectorAll ('div')]. forEach (div => div .removeAttribute ('style')) '. – pat

1

Điều này có thể được thực hiện theo hai bước:

1: chọn phần tử bạn muốn thay đổi theo tên thẻ, id, lớp, v.v.

var element = document.getElementsByTagName('h2')[0];

  1. loại bỏ các thuộc tính style

element.removeAttribute('style');

3

Nếu bạn cần chỉ là trống style của một nguyên tố thì:
element.style.cssText = null;
này nên làm tốt. Hy vọng nó giúp!

+0

Một logic tương tự dường như áp dụng nếu cố gắng" trống rỗng "chỉ một thuộc tính kiểu đơn cho một phần tử:' element.style.display = null; '- đó là những gì tôi cần: D –

Các vấn đề liên quan