- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 jQuery 中有这个函数:
$(document).on('mouseover', '.star', function () {
$(this).prevAll().addBack().addClass('full');
});
$(document).on('mouseout', '.star', function () {
$(this).removeClass('full');
});
我想用原生 javaScript 创建类似的函数。内容是动态呈现的。
如何在 mouseover
和 mouseout
上定位同级元素,如何从所有元素中仅删除一个元素(即被单击的元素)中的类。
这是我尝试过的:
document.addEventListener("mouseout", function(e) {
for (var target = e.target; target && target != this; target = target.parentNode) {
if (target.matches('.star')) {
target.classList.remove('full');
}
}
}, false);
document.addEventListener("mouseover", function(e) {
for (var target = e.target; target && target != this; target = target.parentNode) {
if (target.matches('.star')) {
target.classList.add('full');
// This one removes the class for ALL .star elements.
}
}
}, false);
HTML:
<div data-vote="1" class="star">Star</div>
<div data-vote="2" class="star">Star</div>
<div data-vote="3" class="star">Star</div>
<div data-vote="4" class="star">Star</div>
<div data-vote="5" class="star">Star</div>
Jsfiddle with what I have tried .
Jsfiddle with jQuery - 现有解决方案 - 我正在尝试将其复制到 native JavaScript 中。
最佳答案
您可以尝试这种方法:
document.addEventListener("mouseout", function({ target }) {
if (target.matches('.star')) {
target.classList.remove('full');
}
}, false);
document.addEventListener("mouseover", function({ target }) {
if (target.matches('.star')) {
addClassToPrevSiblings(target, 'full');
}
}, false);
function addClassToPrevSiblings(elem, classToAdd) {
while (elem) {
if (elem.nodeType === 1) {
elem.classList.add(classToAdd);
}
elem = elem.previousSibling;
}
}
对于这两个事件,我只是检查它们的目标是否是星元素。当它是一个 mouseout
事件时,我循环遍历 previous siblings和元素本身添加 full
类。
Here是 jsFiddle 上的工作示例。
关于javascript - 如何用纯 javaScript 替换 .prevAll() 和 .addBack(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57834089/
这是我的 jsTree 实例化代码。 $("#folder_tree").jstree({ "themes" : { "theme" : "default",
我使用 jQuery 有意从一个可能很大的 html 表中的元素中删除 css 类。请参阅下文,了解我这样做的原因。 目前我是这样做的: var tableElements = $("#TreeLis
我试图理解这段代码的作用,以及为什么我们在不使用 addBack() 的情况下获得相同的结果时将 addBack() 与 find() 一起使用 举这两个例子 $("body div").find("
我在 jQuery 中有这个函数: $(document).on('mouseover', '.star', function () { $(this).prevAll().addBack().a
我有一个带有按钮的网格,可以将您带到显示所选项目的所有数据的其他 View ,我想要做的是当用户返回 GridView 时,网格的过滤器保留而不是显示所有数据。 为了保存过滤器,我使用 Kendo G
我目前使用的是 jQuery 1.7.2。我已将 jQuery.UI 下拉元素添加到我的应用程序中,但当我尝试关闭它时出现错误。 Object has no method addBack 我在这里找到
我是一名优秀的程序员,十分优秀!