Làm cách nào để xóa tất cả các kiểu nội tuyến bằng javascript và chỉ để lại những kiểu được chỉ định trong bảng định kiểu css?


94

Nếu tôi có những thứ sau trong html của mình:

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

Và điều này trong trang định kiểu css 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 kiểu nội tuyến và chỉ để lại các kiểu được chỉ định bởi bảng định kiểu css không?

Câu trả lời:


166

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

hoặc là

$('div').removeAttr('style');(Từ câu trả lời của Andres )

Để làm cho điều này nhỏ hơn một chút, hãy thử cách này:

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

Điều này sẽ tăng tốc 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, điều này có thể mất một chút thời gian để xử lý nếu bạn có một 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.


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

Điều này sẽ chỉ nhắm mục tiêu div. Nếu bạn muốn nhắm mục tiêu mọi thứ thì sao?
đèn đường

1
Ở một bên có liên quan, việc gọi .css()với một chuỗi trống làm giá trị thứ hai sẽ chỉ xóa giá trị đã đặt tên khỏi các 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).
Tom Davies

2
@streetlight Sử dụng $('*').removeAttr('style')để nhắm mục tiêu mọi thứ.
Makaze

Không, thực ra cái thứ hai sẽ nhanh hơn một chút vì nếu JQuery có ý nghĩa thì nó sẽ sử dụng loại bỏ thuộc tính tiêu chuẩn. Ngoài ra, việc bạn bỏ quên chi phí lặp lại lớn không hiệu quả mặc dù có nhiều phần tử DOM hơn khiến phương pháp thứ hai thậm chí còn nhanh hơn phương pháp đầu tiên.

32

JavaScript thuần túy:

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 .removeAttribute()phương pháp.

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

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

Nếu bạn đang nhắm mục tiêu nhiều phần tử, chỉ cần lặp lại tập hợp các phần tử đã chọn: (ví dụ)

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.


1
Một thay thế cho Array.prototype.forEach.calllà các nhà điều hành splat khá tốt hỗ trợ, giúp tiết kiệm một dòng: [... document.querySelectorAll('div')].forEach(div => div.removeAttribute('style')).

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

Điều này có hiệu quả hơn thực hiện attr ('style', '') không?
Matt

với $ ('div'). attr ('style', ''); <div style = ""> </div> với $ ('div'). removeAttr ('style'); <div> </div> sạch sẽ hơn
andres descalzo

có thể, bởi vì nó không đặt nó thành giá trị null, nhưng dù theo cách nào thì bạn cũng sẽ nhận được thời gian xử lý lớn vì nó phải đi qua mọi div trong phần thân.
Tyler Carter

vâng, đó là rõ ràng, nó nên được thay đổi để một ID $ ( "# id") hoặc một lớp $ (" .classDivs)
descalzo andres

3

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

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

.removeAttr cuối cùng đã thực hiện thủ thuật trong IE8.


3

Nếu bạn chỉ cần làm trống stylephần tử thì:
element.style.cssText = null;
Điều này sẽ làm tốt. Hy vọng nó giúp!


Một logic tương tự dường như được áp dụng nếu cố gắng để "trống" chỉ một thuộc tính duy nhất cho một yếu tố: element.style.display = null;- đó là những gì tôi cần: D
Bilal Akil

1

Điều này có thể được thực hiện trong 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ỏ thuộc tính style

element.removeAttribute('style');


-2

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


3
trong khi điều này sẽ làm việc, đó là thực tế khủng khiếp đến phong cách inline chỉ ghi đè với quan trọng để loại bỏ chúng!
joshvermaire
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.