Làm thế nào để loại bỏ thuộc tính css bằng javascript?


195

có thể xóa thuộc tính CSS của một phần tử bằng JavaScript không? ví dụ: tôi có div.style.zoom = 1.2, bây giờ tôi muốn xóa thuộc tính thu phóng thông qua JavaScript?


3
Xin làm rõ: bạn đang cố gắng loại bỏ một lớp khỏi một thành phần nào đó, hoặc một thuộc tính từ một thành phần nào đó?
Jan Hančič

1
Xin lỗi vì điều đó, không phải là một lớp, thuộc tính cho một phần tử.
ngồi

Tại sao downvote? đó là một câu hỏi đủ tốt không?
Roland Bouman

2
Xin chào, tôi không hiểu - tại sao bạn đánh dấu câu trả lời của người ngây thơ là "câu trả lời được chấp nhận"? Ý tôi là, giải pháp của anh ấy rất tốt trong trường hợp bạn muốn tìm các yếu tố theo lớp nhưng mọi thứ trong câu hỏi của bạn cho thấy bạn đang tìm kiếm một phương pháp để thay đổi hiệu ứng của việc đặt thuộc tính theo kiểu cục bộ. Chắc chắn, câu trả lời của tôi phù hợp với vấn đề tốt hơn? Có lẽ tôi đã hiểu nhầm câu hỏi của bạn?
Roland Bouman

1
@RolandBouman thực sự nên thay đổi câu trả lời được chấp nhận thành câu trả lời của Edvinas Ilčenko vì nó giải quyết những gì được hỏi về việc xóa thay vì thay đổi thành mặc định. Câu trả lời của bạn vẫn có giá trị vì vậy tôi đã chỉnh sửa nó để làm rõ sự khác biệt.
whitneyland

Câu trả lời:


187

Bạn có hai lựa chọn:

LỰA CHỌN 1:

Bạn có thể sử dụng phương thức removeProperty . Nó sẽ loại bỏ một phong cách từ một yếu tố.

el.style.removeProperty('zoom');

LỰA CHỌN 2:

Bạn có thể đặt nó thành giá trị mặc định:

el.style.zoom = "";

Thu phóng hiệu quả bây giờ sẽ là bất cứ điều gì theo sau các định nghĩa được đặt trong biểu định kiểu (thông qua các thẻ liên kết và kiểu). Vì vậy, cú pháp này sẽ chỉ sửa đổi kiểu cục bộ của phần tử này.


Cùng với CSS người dùng và các kiểu mặc định của trình duyệt.
Quentin

Tôi hiểu OP có nghĩa là họ muốn làm cho nó như thể họ chưa đặt thuộc tính kiểu của phần tử, đó chính xác là những gì bạn đã cung cấp. Tôi đã thử sử dụng el.style.removeProperty ('zoom'); (hoặc 'điền', thực tế, trong trường hợp của tôi) dường như làm điều tương tự trong IE và bị các trình duyệt khác bỏ qua. Vì một số lý do, tôi đã rất ngạc nhiên khi thấy rằng việc đặt nó thành một chuỗi trống có tác dụng tương tự và dường như hoạt động trên tất cả (các phiên bản gần đây) của các trình duyệt.
Shavais

Là hành vi này được chỉ định bất cứ nơi nào trong một tiêu chuẩn? Tôi không thể tìm thấy nó :-(
Oliver Joseph Ash

@OliverJosephAsh vâng, nó được ghi lại, xem câu trả lời này bên dưới stackoverflow.com/a/7901886/700206
whitneyland



10

Bạn có thể sử dụng đối tượng styleSheets:

document.styleSheets[0].cssRules[0].style.removeProperty("zoom");

Hãy cẩn thận # 1: Bạn phải biết chỉ mục của biểu định kiểu của bạn và chỉ mục của quy tắc của bạn.

Hãy cẩn thận # 2: Đối tượng này được các trình duyệt triển khai không nhất quán; những gì hoạt động trong một có thể không hoạt động trong những người khác.


Điều này có vẻ thực sự giòn. Nó sẽ không phá vỡ bất cứ khi nào chỉ số của bạn thay đổi?
Casey Rodarmor

Vâng. Đó chính xác là những gì mà # 1 nói.
james.garriss

Chrome 26 của tôi không có CSSStyleRule.prototype.removeProperty= (Trên thực tế CSSStyleRulekhông có bất kỳ phương thức nào. = (
Rudie

CSSStyleSheet.prototype.removeRuleđể giải cứu.
Rudie

@Rudie, phải không CSSStyleSheet.prototype.deleteRule?
roka

7
element.style.height = null;

đầu ra:

<div style="height:100px;"> 
// results: 
<div style="">

Có vẻ như cài đặt kiểu thành null không hoạt động trong IE11.
MaximeW

1
Tại sao ai đó nên quan tâm đến IEtrình duyệt? Tôi cố tình bỏ qua chúng trong nhiều năm.
T.Todua

4

Bạn có thể thử tìm tất cả các thành phần có lớp này và đặt thuộc tính "thu phóng" thành "không có gì".

Nếu bạn đang sử dụng thư viện javascript của jQuery, bạn có thể làm điều đó với $(".the_required_class").css("zoom","")

Chỉnh sửa: Đã xóa tuyên bố này vì nó không đúng, như đã chỉ ra trong một bình luận và các câu trả lời khác thực sự có thể kể từ năm 2010.

Sai: không có cách nào thường được biết để sửa đổi biểu định kiểu từ JavaScript.


5
Có, có. Sửa đổi bảng định kiểu theo chương trình mặc dù javascript không khó. Nó hoạt động trên nhiều trình duyệt với hiệu suất tuyệt vời và thực sự có ý nghĩa khi thay đổi một thuộc tính giống nhau trên một loạt các yếu tố. Như trường hợp tháng 1 năm 2010 là tốt. Dưới đây là một ví dụ ngắn gọn: stackoverflow.com/questions/14927706/ từ
Clox

Clox: Thêm các bảng định kiểu ghi đè lên một số thuộc tính theo chương trình - tất nhiên! Sửa đổi những cái đã được tải - Không nghe nói về nó.
ngây thơ

Có phải nó có nghĩa là css () chứ không phải attr (). Hoặc có lẽ là attr () trong IE?
Alex KeySmith

nó thực sự nên css, không attr, bạn đúng.
ngây thơ


0

Điều này sẽ thực hiện mẹo - đặt kiểu nội tuyến thành bình thường để thu phóng:

$ ('div'). attr ("style", "zoom: normal;");


1
Câu hỏi là làm thế nào để loại bỏ một kiểu, câu trả lời này sẽ phá hủy tất cả các kiểu tồn tại và thay thế chúng bằng một mục mới.
whitneyland

0

thực tế, nếu bạn đã biết tài sản, điều này sẽ làm điều đó ...

ví dụ:

<a href="test.html" style="color:white;zoom:1.2" id="MyLink"></a>

    var txt = "";
    txt = getStyle(InterTabLink);
    setStyle(InterTabLink, txt.replace("zoom\:1\.2\;","");

    function setStyle(element, styleText){
        if(element.style.setAttribute)
            element.style.setAttribute("cssText", styleText );
        else
            element.setAttribute("style", styleText );
    }

    /* getStyle function */
    function getStyle(element){
        var styleText = element.getAttribute('style');
        if(styleText == null)
            return "";
        if (typeof styleText == 'string') // !IE
            return styleText;
        else  // IE
            return styleText.cssText;
    } 

Lưu ý rằng điều này chỉ hoạt động cho các kiểu nội tuyến ... không phải các kiểu bạn đã chỉ định thông qua một lớp hoặc một cái gì đó tương tự ...

Lưu ý khác: bạn có thể phải thoát một số ký tự trong câu lệnh thay thế đó, nhưng bạn có ý tưởng.


-3

Để thay đổi tất cả các lớp cho một phần tử:

document.getElementById("ElementID").className = "CssClass";

Để thêm một lớp bổ sung cho một phần tử:

document.getElementById("ElementID").className += " CssClass";

Để kiểm tra xem một lớp đã được áp dụng cho một phần tử chưa:

if ( document.getElementById("ElementID").className.match(/(?:^|\s)CssClass(?!\S)/) )

1
Câu hỏi là làm thế nào để loại bỏ một phong cách, câu trả lời này không có gì để làm với điều đó.
whitneyland
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.