如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
How to control (avoid) styling of nested html elements when using jQuery if classes are not an option?
我正在使用jQuery在Wordpress主题中实现动态样式功能。jQuery使用内联样式这一事实使我受到挑战,这可能会产生嵌套元素可能被选择器定位的效果,即使相同的选择器在CSS规则中不起作用。为了说明我的意思,请看一下这个JSFiddle。
.HTML:
<p>
This is normal text
<br>
<br>
<em>This is italic text</em>
<br>
<br>
<strong>This is bold text</strong>
<br>
<br>
<strong><em>This is bold italic text</em></strong>
<br>
<br>
<em><strong>This is also bold italic text</strong></em>
<br>
<br>
</p>
<button>
Style it!
</button>
.CSS:
p em strong,
p strong em {
color: red;
}
p strong {
color: blue;
}
j查询:
(function($) {
$('button').on('click', function() {
$('p strong').css('color', 'turquoise');
});
})(jQuery);
如图所示,粗体文本的 CSS 样式仅按预期对粗体文本生效,但使用 jQuery - 使用相同的选择器,将标记作为嵌套标记的粗斜体文本的实例也会受到影响。
是否可以像示例中那样进行不包含嵌套元素的 jQuery 选择?显然,如果我可以使用类,解决方案会很简单,但在这种情况下我不能。
如果我将 !important 选项添加到最初设置为红色样式的元素中,我会得到我想要的,但如果可能的话,我真的很想避免这种情况。谢谢。
如果需要解决特定情况,则可以使用 jQuery .not()
方法从选择中排除选择。对于这种情况:
$('p strong').not('p em strong').css('color', 'turquoise');
这并不能解决 jQuery .css()
方法编辑元素的 style
属性的总体问题,当浏览器确定要应用的样式时,该属性会为样式增加一个数量级的特异性。
一种替代方法是创建一个JavaScript函数,该函数将为DOM添加新的CSS样式。示例函数可能如下所示:
var createCSSStyle = (function() {
var styleSheet = null;
return function(selector, cssOptions) {
if (styleSheet == null) {
styleSheet = document.createElement('style');
styleSheet.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(styleSheet);
}
var text = " " + selector + " {";
for(var prop in cssOptions)
text += prop + ":" + cssOptions[prop] + ";";
text += "}";
styleSheet.innerHTML += text;
};
})();
并使用它:
createCSSStyle('p strong', { 'color' : 'turquoise' });
这是你的小提琴的更新。
注意:我在这里使用了一个自执行函数,以便可以将样式表保存到局部变量中。我不想每次调用该方法时都创建一个新的样式表。只是第一次。
除非我误解了问题,否则您可以使用直接子选择器。
$('p > strong').css('color', 'turquoise');
样式标签附加到头部,然后将样式写入其中。然后,您没有内联样式。
(function($) {
var styles = [];
function styler(style){
styles.push(style);
$("#styler").html(styles.join("'n"));
}
$('button').on('click', function() {
styler("p strong {color: turquoise;}")
});
$("head").append("<style id='styler'></style>")
})(jQuery);
:nth-child
尝试过这个选择器.?
这是一个例子
https://jsfiddle.net/3pc98j7u/1/
- 如何将函数包装在函数中以避免代码重复
- JS编译器/包管理器,用于版本控制
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 三星智能电视应用程序;Brightcove示例应用程序远程控制问题
- 如何控制组件'的createContent函数被激发
- 节点协同与生成器和Promise并行流量控制
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- 使用:new Image()控制加载html.src=html_URL
- 传单缩放控制位置错误
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- 如何避免在我没有的远程脚本上运行javascript错误't控制
- 如果子字符串为 null,如何跳过并避免控制台中的错误
- 如何控制角度中的过渡以避免看到内容加载
- 如何避免“;否'访问控制允许来源'标头存在"javascript错误
- Chrome创建扩展名以避免源文件//是访问控制不允许的允许源文件
- 自动javascript版本控制,避免浏览器缓存清理
- 当无法控制同源策略错误时,如何避免同源策略错误
- Javascript版本控制以避免缓存,这些实践的区别
- 如何避免“请求报头字段”访问-控制-允许-报头&;从本地驱动器运行JavaScript