是否可以使用JQuery从CSS类中获取类定义或值?

时间:2019-12-26 20:54:25

标签: jquery html css dhtml

给出以下CSS:

.myClass1 {
    width: 50px;
}
.myClass2 {
    width: 150px;
}

以及以下HTML:

...
<div id="myDiv">...</div>
...

是否可以在不引用元素本身的情况下确定类内部的值?

JQuery.someFunc(".myClass1").width()

或者我必须将类分配给元素,然后像这样检查实际的属性值:

function CheckClassWidthValue() {
    var $myDiv = $("#myDiv");

    $myDiv.removeClass();
    $myDiv.addClass("myClass1");
    var class1Width = $myDiv.width();

    $myDiv.removeClass();
    $myDiv.addClass("myClass2");
    var class2Width = $myDiv.width();
}

如果我可以直接从CSS类名中提取值,那么我正在编写的代码将更加简洁。最好避免定位CSS元素,而对代码进行解析。

谢谢!

1 个答案:

答案 0 :(得分:1)

假设页面只有一个样式表(索引index.html),这很容易。像这样去

0
function getStyleDeclaration(selector, property) {
  return [...document.styleSheets[0].cssRules].filter(
    rule => rule.selectorText === selector
  )[0].style[property];
}

function getStyleDeclarations(selector) {
  const declarations = [...document.styleSheets[0].cssRules].filter(
    rule => rule.selectorText === selector
  )[0].style;
  return Object.keys(declarations).reduce((acc, val) => {
    return { ...acc,
      [declarations[val]]: declarations[declarations[val]]
    }
  }, {});
}

console.log(getStyleDeclaration('.myClass1', 'width'));
console.log(getStyleDeclaration('.myClass2', 'color'));
console.log(getStyleDeclarations('.myClass2'));