【问题标题】:How to style the active element using javascript [duplicate]如何使用javascript设置活动元素的样式[重复]
【发布时间】:2016-10-19 21:34:18
【问题描述】:

我可以使用 CSS 来设置元素的样式,以便它在活动时改变外观。例如:

.test:active { 
    background-color: yellow;
}

但是,如果我想将其应用于特定元素而不是按类,我该如何在 javascript 中执行此操作?我可以使用以下方法设置默认状态的背景颜色:

document.getElementById("myid").style.backgroundColor = "yellow"

但我不能这样做:

document.getElementById("myid").style.active.backgroundColor = "yellow"

我不希望 javascript 响应元素是否处于活动状态 - 我想在 javascript 中进行静态初始化,然后使特定元素在活动时具有不同的颜色。

如果保证元素有一个 id,我可以使用 javascript 附加一个使用 #id 选择器的样式表规则,但我没有这个保证。我可以确定的是,我将获得一个元素的引用,并且我需要设置它的样式,以便它在活动时具有不同的颜色。

【问题讨论】:

  • 为什么不给元素添加自己的样式类呢?
  • @TimoSta 如果没有其他办法,我可能不得不这样做。是不是不能通过javascript访问这部分CSS?
  • 我不认为你可以使用 JavaScript 使用 css 伪类规则。
  • 我很困惑。如果您希望特定元素在活动时具有特定样式,则只需将 test 类添加到该元素即可。你想完成什么没有?伪类仅可用作 CSS 规则中的选择器的一部分,如果您考虑一下,这是有道理的。通过 JS 处理它们的唯一方法是使用 CSSOM API 编写自己的 CSS 规则,而且确实需要这样做的情况很少见。

标签: javascript css


【解决方案1】:

您可以对特定元素使用事件侦听器。

定义元素时,试试这个。您当然可以将其设为按钮或其他任何东西:

<!-- in this case, using 'this' will refer to the element at hand. this way the element is targeted even if it has no ID or class -->
<input onfocus="elemFocused(this)" onblur="elemBlurred(this)">

这使得当您聚焦元素(使其处于活动状态)时,它会运行聚焦功能。当它模糊时(您选择不同的输入或其他东西),它会运行模糊功能。在javascript中:

function elemFocused(element){
    element.style.backgroundColor = 'yellow'; // sets BG color to yellow
}
function elemBlurred(element){
    element.style.backgroundColor = 'initial';// sets BG color to default; you can change if needed
}

【讨论】:

  • 我已经说过我不希望 javascript 元素必须响应元素是否处于活动状态,因此这种方法行不通。
  • 我不相信可以访问 CSS 伪类,例如 :active 和 :hover。我从来没有见过它完成,而且刚才的一些研究告诉我它也不能完成。在此处查看此 SO 的最佳答案:stackoverflow.com/questions/311052/…
【解决方案2】:

我不确定您是否可以直接以编程方式访问 ':active' 样式,但您确实可以访问活动事件,因此您可以通过以下方式复制它:

在您的 CSS 中添加一个 CSS 类来处理您的活动状态,例如:

.active{
  background-color: red;
}

然后只需在该事件上添加类:

document.getElementById("myid").onfocus = function(){
  this.className += "active";
};

document.getElementById("myid").onblur = function(){
  this.className = "/*replace this with the original classes*/";
};

【讨论】:

  • 是的,这就是我想要弄清楚的,如果有对 ":active" 样式的编程访问。
  • 我不相信您可以根据状态访问元素,除非您可以使用标签上的属性或上面的类自己存储它。 This answer goes more in-depth
  • @torazaburo 哦,你说得对。它应该是鼠标按下和鼠标向上事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多