gpt4 book ai didi

javascript - 根据属性覆盖

转载 作者:行者123 更新时间:2023-11-30 14:38:37 27 4
gpt4 key购买 nike

想象一个包含多个 div 元素的 HTML 页面,它们都属于相同的 class 但有另一个区分它们的属性:

<!DOCTYPE html>
<html>
<body>
<div class="myClass" foo="anythingInHere_1">
<img src="https://www.w3schools.com/html/w3schools.jpg" alt="W3Schools.com" width="104" height="142">
</div>
<div class="myClass" foo="anythingInHere_2">
<img src="https://www.w3schools.com/html/w3schools.jpg" alt="W3Schools.com" width="104" height="142">
</div>
<div class="myClass" foo="anythingInHere_3">
<img src="https://www.w3schools.com/html/w3schools.jpg" alt="W3Schools.com" width="104" height="142">
</div>
</body>
</html>

foo 属性包含某种 id,它是问号后面的整数。我需要从 foo 属性中提取该 id 并单独存储在另一个属性中。我(以某种方式)使用 JavaScript 解决了这个问题:

a = document.getElementsByClassName("myClass")
a[0].setAttribute("id", a[0].getAttribute("foo").match("(?<=anythingInHere_)[0-9]+"))

此外,还有一个 JSON 文件,其中包含这些提取的 ID 的附加数据,例如:

{
"data": [
{"id": 1, "fill": "#0099ff"},
{"id": 2, "fill": "#ff0066"},
{"id": 3, "fill": "#00cc00"}
]
}

根据映射到提取的 id 的这些颜色,我想用一个半透明框覆盖相应的 div,填充 JSON 中指定的颜色。

这就是我卡住的地方。可能需要 JS 和 CSS 的组合,并且必须有某种逻辑(我猜可能是 JS)将这些半透明框放在正确的 divs 上。

您可能已经注意到 HTML、CSS 和 JS 不是我的主要技能,但我认为这项工作是可行的 - 如果不是,请纠正我。否则,我将感谢您提供一些帮助或如何继续前进的一般建议。

最佳答案

我已经走了几条捷径,但希望这就是您要找的。如果需要与另一个 div 叠加,需要将 div 定位为绝对。

<body>
<div style="width:104px; height:142px;position:absolute; top:0px; left:0px">
<img src="https://www.w3schools.com/html/w3schools.jpg" alt="W3Schools.com" width="104" height="142" style="display:inline-block;">
<span style="position:absolute; top:0px; left:0px; width:104px; height:142px; display:inline-block; background:rgba(255, 0, 0, 0.0)" class="myClass" foo="anythingInHere_1" >
</span>
</div>
<div style="width:104px; height:142px;position:absolute; top:150px; left:0px">
<img src="https://www.w3schools.com/html/w3schools.jpg" alt="W3Schools.com" width="104" height="142" style="display:inline-block;">
<span style="position:absolute; top:0px; left:0px; width:104px; height:142px; display:inline-block; background:rgba(255, 0, 0, 0.0)" class="myClass" foo="anythingInHere_2" >
</span>

</div>
<div style="width:104px; height:142px;position:absolute; top:300px; left:0px">
<img src="https://www.w3schools.com/html/w3schools.jpg" alt="W3Schools.com" width="104" height="142" style="display:inline-block;">
<span style="position:absolute; top:0px; left:0px; width:104px; height:142px; display:inline-block; background:rgba(255, 0, 0, 0.0)" class="myClass" foo="anythingInHere_3" >
</span>
</div>
</body>

和脚本

function hexToRgb(hex) {
var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
hex = hex.replace(shorthandRegex, function(m, r, g, b) {
return r + r + g + g + b + b;
});

var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}

var a = document.getElementsByClassName("myClass")
var obj = JSON.parse('{ "data": [ {"id": 1, "fill": "#0099ff"}, {"id": 2, "fill": "#ff0066"}, {"id": 3, "fill": "#00cc00"} ]}');

for(var x=0;x<a.length;x++)
a[x].setAttribute("id", a[x].getAttribute("foo").match("(?<=anythingInHere_)[0-9]+"))

for(var x=0;x<obj.data.length;x++)
document.getElementById("" + (x+1)).style.background = "rgba(" + hexToRgb(obj.data[x].fill).r + "," + hexToRgb(obj.data[x].fill).g + "," + hexToRgb(obj.data[x].fill).b + ",0.4)";

关于javascript - 根据属性覆盖<div>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50039421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com