清除:使用JavaScript在当前元素上激活伪类

清除:使用JavaScript在当前元素上激活伪类,javascript,css,webkit,css-selectors,qtwebkit,Javascript,Css,Webkit,Css Selectors,Qtwebkit,我已经实现了自己的动态滚动组件,它通常工作得很好。我的问题是,页面中使用:active伪类的链接元素即使在用户滑动并滚动屏幕时也会保持其:active状态(这意味着鼠标不会生成“单击”) 目前我已经可以避免“点击”事件,但是视觉反馈(:active)与行为不匹配 所以我需要通过JavaScript直接或间接地清除“:active”。也许创建一个虚拟链接并通过JavaScript“激活”它可以解决这个问题,但我没有运气 为了找到解决方案,a制作了一个简单的测试用例,演示了以下内容: 有什么想法吗

我已经实现了自己的动态滚动组件,它通常工作得很好。我的问题是,页面中使用:active伪类的链接元素即使在用户滑动并滚动屏幕时也会保持其:active状态(这意味着鼠标不会生成“单击”)

目前我已经可以避免“点击”事件,但是视觉反馈(:active)与行为不匹配

所以我需要通过JavaScript直接或间接地清除“:active”。也许创建一个虚拟链接并通过JavaScript“激活”它可以解决这个问题,但我没有运气

为了找到解决方案,a制作了一个简单的测试用例,演示了以下内容:

有什么想法吗

注意,我只需要一个与Webkit一起工作的解决方案

更新 这个肮脏的黑客从元素
l1
中清除了:active伪类(基本上是从文档中简单地删除它):


问题是,
document.activeElement
显然没有引用刚按下鼠标的链接(它们没有那样获得焦点),所以我无法知道哪个元素当前处于活动状态。

我不确定我是否完全理解您的意图,但是您可以使用
document.querySelector
获取活动元素

将以下代码添加到测试用例对我来说很有用:

var aEl = document.querySelector("a:active"),  // Active Element
    nEl = aEl && aEl.nextSibling,              // The node following it
    pEl = aEl && aEl.parentNode;               // The parent node

if (aEl && pEl) {
    pEl.removeChild(aEl);
    pEl.insertBefore(aEl, nEl);
} 
工作演示:


既然您添加了标签,我假设您可以控制环境,不必担心遗留浏览器

问:我还没有测试过,但也许你可以用javascript创建一个mouseup事件,这样浏览器就认为按钮被释放了?@Mickey:不完全一样。我只需要清除“:active”,因此假设一次只能有一个“:active”元素,将另一个元素设置为active就足够了(但不知道如何操作)。@Lister先生:刚刚尝试过。这导致链接被“点击”,但它仍然处于“活动”状态,不幸的是。@FrankvanWijk没有那么快指出潜在的重复项,也没有帮助任何人,也许你应该花一点时间阅读这个问题,并意识到它实际上是一个非常不同的问题。太棒了!那很好用。我对removeChild/insertChild的黑客攻击并不满意,但至少这是可行的。您使用InsertAdjaceEntelement()而不是标准的insertBefore()有什么具体原因吗?@UdoG:只是有点大脑故障。我很快就改变了它(正如你在答案代码中看到的),但是忘记了。哦,好吧。:-)
var aEl = document.querySelector("a:active"),  // Active Element
    nEl = aEl && aEl.nextSibling,              // The node following it
    pEl = aEl && aEl.parentNode;               // The parent node

if (aEl && pEl) {
    pEl.removeChild(aEl);
    pEl.insertBefore(aEl, nEl);
}