CSSStyleSheet: insertRule() method

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Phương thức CSSStyleSheet.insertRule() chèn một CSS rule mới vào bảng kiểu hiện tại.

Note: Mặc dù insertRule() là phương thức riêng của CSSStyleSheet, nó thực sự chèn quy tắc vào CSSStyleSheet.cssRulesCSSRuleList nội bộ của nó.

Cú pháp

js
insertRule(rule)
insertRule(rule, index)

Tham số

rule

Một chuỗi chứa quy tắc cần chèn. Nội dung quy tắc cần chèn phụ thuộc vào loại của nó:

  • Đối với rule-sets, cần cả bộ chọn và một khai báo kiểu dáng.
  • Đối với at-rules, cần cả định danh at-rule và nội dung quy tắc.
index Optional

Một số nguyên dương nhỏ hơn hoặc bằng stylesheet.cssRules.length, đại diện cho vị trí của quy tắc mới được chèn trong CSSStyleSheet.cssRules. Mặc định là 0. (Trong các triển khai cũ hơn, tham số này là bắt buộc. Xem Browser compatibility để biết chi tiết.)

Giá trị trả về

Chỉ số của quy tắc mới được chèn trong danh sách quy tắc của bảng kiểu.

Ngoại lệ

IndexSizeError DOMException

Được ném ra nếu index > CSSRuleList.length.

HierarchyRequestError DOMException

Được ném ra nếu rule không thể được chèn tại vị trí chỉ định do một số ràng buộc CSS; ví dụ: cố gắng chèn một @import at-rule sau một style rule.

SyntaxError DOMException

Được ném ra nếu có nhiều hơn một quy tắc được truyền trong tham số rule.

InvalidStateError DOMException

Được ném ra nếu rule@namespacedanh sách quy tắc chứa các at-rule khác ngoài @import@namespace at-rules.

Ví dụ

Chèn một quy tắc mới

Đoạn mã này đẩy một quy tắc mới lên đầu bảng kiểu của tôi.

js
myStyle.insertRule("#blanc { color: white }", 0);

Hàm để thêm quy tắc bảng kiểu

js
/**
 * Thêm một quy tắc bảng kiểu vào tài liệu (có thể thực hành tốt hơn
 * là thay đổi các lớp động, để thông tin kiểu dáng có thể được giữ trong
 * các bảng kiểu thực tế và tránh thêm phần tử thừa vào DOM).
 * Lưu ý rằng cần một mảng cho các khai báo và quy tắc vì ECMAScript không
 * đảm bảo thứ tự lặp đối tượng có thể đoán trước, và vì CSS
 * phụ thuộc vào thứ tự.
 * @param {Array} rules Chấp nhận một mảng các khai báo được mã hóa JSON
 * @example
addStylesheetRules([
  ['h2', // Cũng chấp nhận đối số thứ hai là một mảng các mảng thay thế
    ['color', 'red'],
    ['background-color', 'green', true] // 'true' cho các quy tắc !important
  ],
  ['.myClass',
    ['background-color', 'yellow']
  ]
]);
*/
function addStylesheetRules(rules) {
  const styleEl = document.createElement("style");

  // Nối phần tử <style> vào <head>
  document.head.appendChild(styleEl);

  // Lấy sheet của phần tử style
  const styleSheet = styleEl.sheet;

  for (let rule of rules) {
    let i = 1,
      selector = rule[0],
      propStr = "";
    // Nếu đối số thứ hai của một rule là một mảng các mảng, điều chỉnh các biến.
    if (Array.isArray(rule[1][0])) {
      rule = rule[1];
      i = 0;
    }

    for (; i < rule.length; i++) {
      const prop = rule[i];
      propStr += `${prop[0]}: ${prop[1]}${prop[2] ? " !important" : ""};\n`;
    }

    // Chèn CSS Rule
    styleSheet.insertRule(
      `${selector}{${propStr}}`,
      styleSheet.cssRules.length,
    );
  }
}

Specifications

Specification
CSS Object Model (CSSOM)
# dom-cssstylesheet-insertrule

Browser compatibility

See also