在某些元素具有自定义CSS属性的应用程序中,是否可以通过JavaScript检索此类值?
例如
<div id="myDiv" style="color:#f00;-my-custom-property:upsidedown;" />
我可以通过以下两种方法访问color属性:
$('myDiv').style.getPropertyValue("color")
$('myDiv').style.color
但是这些不适用于自定义属性。完全支持吗?
浏览器无法理解的CSS值将被丢弃,这说明了为什么-my-custom-property
无法通过来获取CSS值.style
。
过去,您不得不依靠存储具有数据属性的数据并自己通过JavaScript处理继承。
但是,自此以来,“自定义属性”(也称为“CSS变量”)已被引入标准并由浏览器实现,截止到2019-05-09,全球约有92%的支持。乍一看,Edge似乎是最后一个实现的主要浏览器,2017年10月16日发布了版本16。
本质上,您需要--my-custom-property:'foobar';
在元素上设置自定义属性(例如),并且可以使用类似getComputedStyle(your_el).getPropertyValue("--my-custom-property")
返回的内容'foobar'
(带有前导空格)对其进行访问。请注意前导空格和引号。它将完全返回所提供的值。
例:
console.log(getComputedStyle(document.getElementById("a")).getPropertyValue("--my-custom-property-1"))
console.log(getComputedStyle(document.getElementById("b")).getPropertyValue("--my-custom-property-2"))
#b-div { --my-custom-property-2: 'world' }
<div style="--my-custom-property-1: 'hello'"><h1 id="a">#a 'hello'</h1></div>
<div id="b-div"><h1 id="b">#b 'world'</h1></div>
这是使用一个和两个前导连字符,继承以及检索值的不同方法进行的一些测试:
function log(computed, selector, prop, value) {
let method = computed ? "getComputedStyle(el)" : "el.style"
let method_id = computed ? "computed" : "raw"
// Build first level of list (tag name)
let first = document.querySelector("#" + selector)
if (!first) {
first = document.createElement("li")
first.appendChild(document.createTextNode(selector))
first.setAttribute("id", selector)
first.appendChild(document.createElement("ul"))
document.querySelector("ul").appendChild(first)
}
// Build second level of list (method of style retrieval)
let second = document.querySelector("#" + selector + "-" + method_id)
if (!second) {
second = document.createElement("li")
second.appendChild(document.createTextNode(method))
second.setAttribute("id", selector + "-" + method_id)
second.appendChild(document.createElement("ul"))
first.querySelector("ul").appendChild(second)
}
// Build third level of list (property accessed)
let third = document.querySelector("#" + selector + "-prop" + prop)
if (!third) {
third = document.createElement("li")
third.appendChild(document.createTextNode(prop + ": `" + value + "`"))
third.setAttribute("id", "prop" + prop)
second.querySelector("ul").appendChild(third)
if (value === "") {
third.classList.add("bad")
} else {
third.classList.add("good")
}
}
}
// Uses .style
function getStyleAttr(selector, prop) {
let value = document.querySelector(selector).style.getPropertyValue(prop)
log(false, selector, prop, value)
}
// Uses getComputedStyle()
function getStyleComputed(selector, prop) {
let value = getComputedStyle(document.querySelector(selector)).getPropertyValue(prop)
log(true, selector, prop, value)
}
// Loop through each property for each element and output the value
let selectors = ["article", "h1", "p"]
let props = ["--my-custom-property", "-my-custom-property"]
selectors.forEach(function(selector) {
props.forEach(function(prop) {
getStyleAttr(selector, prop)
getStyleComputed(selector, prop)
})
})
code {
background: #eee;
padding: .2em;
}
.bad {
color: #800;
}
.good {
color: #080;
}
<article class="custom-prop-inheritance" style="--my-custom-property: 'foobar'; -my-custom-property: 'foobar'">
<h1>Title</h1>
<p>Custom properties require two leading hyphens (<code>-my-custom-property</code> <em>never</em> works). Using <code>el.style</code> does not support inheritance. To support both inheritance and custom properties, you must use <code>getComputedStyle(<b>el</b>)</code> along with two leading hyphens on the custom property (eg, <code>--my-custom-property</code>).</p>
</article>
<ul></ul>
问题内容: 因此,如果有一个链接到网页的css文件,例如: 并且我想读取某个属性,例如div具有className =’layout’,并且我想使用JavaScript读取此属性的详细信息,我该怎么做? 我搜索了很多,但几乎没有运气,请提出建议。 问题答案: 您有两种选择: 手动枚举和解析对象(不建议使用,除非您要获取由某个选择器定义的所有特定样式属性)。 创建与选择器匹配的元素,然后使用或(IE
问题内容: 我想: 查找页面中所有元素的样式属性(例如:具有的所有元素) 更改所有属性(例如从到)。 您对此有何建议? 问题答案: 我的建议是尽可能避免这样做。而是使用类来分配颜色值,然后可以使用该类而不是颜色值来查找元素。 据我所知,没有可用于查询 特定 样式值的选择器(即使在CSS3中也是如此),这意味着循环遍历所有元素(或者看起来可以将其限制为具有属性的所有元素)并看着财产。现在,问题是,即
我正在尝试访问容器的属性并获取图像URL。 问题是容器div最初是隐藏的,而图像url是动态添加的,并且容器是可见的。 当我尝试使用访问元素时,它返回给我。 html代码为: 此分区的CSS为: 但是,使用下面的代码可以获得url字符串: 使用以下代码动态添加图像容器“photo_holding”
问题内容: 我正在使用Java解析Xml,我想在属性值的帮助下解析元素。 例如 在这种情况下,我想使用att值解析tag1数据。我是java和xml的新手。请引导我。 问题答案: 有多种方法可以做到这一点。您可以使用xPath(示例),DOM Document或SAX Parser(示例)来检索属性值和标记元素。 这是您要求的解决方法。我从不建议使用“ hack”类型,而是使用SAX(请参见示例链
本文向大家介绍使用jQuery获取data-的自定义属性,包括了使用jQuery获取data-的自定义属性的使用技巧和注意事项,需要的朋友参考一下 废话少说,先上代码 通过jQuery制作组件,可以轻松获取到我们data-的自定义属性,也可以给data-属性来赋值。 获取: 赋值:
问题内容: 假设我使用以下命令通过XPath找到了一个元素: 我知道我可以通过获取特定CSS属性的值,但是可以获取所有属性的值而不必明确提及其名称吗? 问题答案: 原生Selenium API无法做到这一点。 但是,使用Javascript您可以: 您可以使用Seleniums的功能使用一些javascript支持。 必要的js代码可在找到(由@Mahsum Akbas提出) 现在,这里是Java