通过JS选择伪元素:焦点和:活动
Selecting Pseudo Element :focus and :active via JS
对于我想通过JS函数更改的样式表单文本框,我似乎无法获得伪选择解决方案来处理:focus
。
我知道这是添加一个类的问题,我看到了:after
和:before
的例子,但没有看到:focus
的例子,我不确定在哪里添加类
JS:
$(document).ready(function() {
function night() {
var currentTime = new Date().getHours();
if (0 <= currentTime&¤tTime < 5) {
$('.text_box').css('text-shadow', '0 0 0 #272727');
$('.text_box:focus').css('background-color', '0 0 0 #FFF');
}
if (10 <= currentTime&¤tTime <= 24) {
$('.text_box').css('text-shadow', '0 0 0 #FFF');
$('.text_box:focus').css('background-color', '0 0 0 #272727');
}
}
night();
});
CCS:
.text_box {
width:350px;
height: 80px;
color: transparent;
text-shadow: 0 0 0 #fff;
text-align:left;
font-size: 4.2em;
padding-top: 25px;
padding-left: 15px;
padding-bottom: 10px;
outline:none;
background-color:transparent;
cursor: text;
float:inherit;
display:inline block;
position:relative;
-webkit-appearance: none;
-webkit-border-radius: 0;
letter-spacing: 1px;
-webkit-transition:.5s ease;
-moz-transition:.5s ease;
-o-transition:.5s ease;
-ms-transition:.5s ease;
transition:.5s ease }
.text_box:focus {
background-color: #FFF;
color: transparent;
text-shadow: 0 0 0 #272727;
-webkit-transition:.5s ease;
-moz-transition:.5s ease;
-o-transition:.5s ease;
-ms-transition:.5s ease;
transition:.5s ease;
-moz-box-shadow: 0 0 1em #FFF;
-webkit-box-shadow: 0 0 1em #FFF;
-webkit-animation-name:boxPulse; }
当您的代码决定应该这样做时,只需从JavaScript添加一个CSS类
document.getElementById('day').addEventListener('click', function() {
addClasses('day', 'night');
});
document.getElementById('night').addEventListener('click', function() {
addClasses('night', 'day');
})
function addClasses(add, remove) {
var buttons = document.getElementsByTagName('input');
for (var i = 0; i < buttons.length; i++) {
buttons[i].classList.add(add);
buttons[i].classList.remove(remove);
}
buttons[0].focus();
}
$(document).ready(function() {
var currentTime = new Date().getHours();
if (currentTime > 20 || (0 <= currentTime && currentTime < 5)) {
addClasses('night', 'day');
} else {
addClasses('day', 'night');
}
});
.day:focus {
background-color: #ddd;
color: red;
}
.night:focus {
background-color: black;
color: yellow;
}
:focus {
text-shadow: 0 0 0 #272727;
-webkit-transition: .5s ease;
-moz-transition: .5s ease;
-o-transition: .5s ease;
-ms-transition: .5s ease;
transition: .5s ease;
-moz-box-shadow: 0 0 1em #FFF;
-webkit-box-shadow: 0 0 1em #FFF;
-webkit-animation-name: boxPulse;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" placeholder="name" value="Some Name" />
<br>
<input type="text" placeholder="last name" value="Last Name" />
<button id='day'>Make day</button>
<button id='night'>Make night</button>
不需要jquery,尽管它确实有很酷的效果,但也不需要类。试试这个:
:focus {
background-color:green;
}
<input type="text" placeholder="name" /><br>
<input type="text" placeholder="last name" />
或者两者之间的某种组合。
我实际上找到了一个很好的解决方案。我在这里阅读了一些选择伪元素:after
和:before
的教程,但从未见过适用于:focus
和:active
的教程。
我的问题是:我想根据一天中的时间为页面上的某些元素提供不同的CSS,但不需要切换整个样式表。(这是一个简单的网站,我觉得很草率)。我使用:$('.text_box').css('text-shadow', '0 0 0 #272727');
来调整CSS元素,但在尝试调整样式化的伪元素时遇到了障碍。
为了让它成为单词,我使用了addRule
方法,它允许我调整我组装的时间敏感的CSS-JS脚本中的CSS。
(function($) {
window.addRule = function(selector, styles, sheet) {
if (typeof styles !== "string") {
var clone = "";
for (var style in styles) {
var val = styles[style];
style = style.replace(/([A-Z])/g, "-$1").toLowerCase();
clone += style + ":" + (style === "content" ? '"' + val + '"' : val) + "; ";
}
styles = clone;
}
sheet = sheet || document.styleSheets[0];
if (sheet.insertRule) sheet.insertRule(selector + " {" + styles + "}", sheet.cssRules
.length);
else if (sheet.addRule) sheet.addRule(selector, styles);
return this;
};
if ($) {
$.fn.addRule = function(styles, sheet) {
addRule(this.selector, styles, sheet);
return this;
};
}
}(window.jQuery));
$(document).ready(function() {
function night() {
var currentTime = new Date().getHours();
if (0 <= currentTime && currentTime < 5) {
$('.text_box').css('text-shadow', '0 0 0 #272727');
$(".text_box:focus").addRule("background-color: #272727");
$(".text_box:focus").addRule("color: #FFF");
$(".text_box:focus").addRule("-moz-box-shadow: 0 0 1em #272727");
$(".text_box:focus").addRule("-webkit-box-shadow: 0 0 1em #272727;");
$("#mc-embedded-subscribe").addRule("color: #272727;");
$(".submit_box:hover").addRule("background-color:#272727 !important;");
$(".submit_box:hover").addRule("color:#FFF !important;");
$(".submit_box:hover").addRule("-moz-box-shadow: 0 0 1em #272727");
$(".submit_box:hover").addRule("-webkit-box-shadow: 0 0 1em #272727;");
}
if (20 <= currentTime && currentTime <= 24) {
$('.text_box').css('text-shadow', '0 0 0 #272727');
$(".text_box:focus").addRule("background-color: #272727");
$(".text_box:focus").addRule("color: #FFF");
$(".text_box:focus").addRule("-moz-box-shadow: 0 0 1em #272727");
$(".text_box:focus").addRule("-webkit-box-shadow: 0 0 1em #272727;");
$("#mc-embedded-subscribe").addRule("color: #272727;");
$(".submit_box:hover").addRule("background-color:#272727 !important;");
$(".submit_box:hover").addRule("color:#FFF !important;");
$(".submit_box:hover").addRule("-moz-box-shadow: 0 0 1em #272727");
$(".submit_box:hover").addRule("-webkit-box-shadow: 0 0 1em #272727;");
}
}
night();
});
这很有效,不过我想知道是否有更简单的解决方法?这比在包含:active
或:focus
的现有元素中添加新类要简单得多,但我认为在这种情况下这不会正常工作。
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 单击时将焦点更改为元素
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 活动选项卡's源代码-获取变量s值
- 在Angular 2中布线期间保持零部件处于活动状态
- 在ajax成功后,cluetip不适用于首次点击活动元素
- 在IE9中的输入字段中输入焦点最近按钮
- 如何使bxslider仅在移动视图中处于活动状态
- Javascript游戏输入失去焦点
- 按钮处于活动状态,焦点无法在Mac FireFox上工作
- 将焦点设置在带有错误消息的第一个输入元素上,并将包含它的 TabStrip 选项卡设置为活动状态
- ng单击,但防止任何活动输入失去焦点
- qTip2隐藏-组合无焦点、非活动和固定
- 如何在angular.js中对单击的li(选项卡)设置焦点/活动
- 当AppBar处于活动状态时显示软键盘,使用焦点使内容跳回到顶部
- 通过JS选择伪元素:焦点和:活动
- 正在获取网页中的活动元素或焦点元素Id
- 在输入为活动/焦点时触发onchange输入