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

时间:2012-03-28 10:08:57

标签: javascript css webkit css-selectors qtwebkit

我已经实现了我自己的动态滚动组件,该组件通常运行良好。我的问题是页面中使用:active 伪类的链接元素保持其活动状态,即使用户滑动并因此滚动屏幕(这意味着鼠标不会生成“点击”)。

目前我已经可以避免“点击”事件,但视觉反馈(:有效)与行为不符。

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

要找到解决方案,请创建一个简单的测试用例来演示:http://jsfiddle.net/LkAXd/2/

有什么想法吗?

注意我只需要一个适用于Webkit的解决方案。

更新

这个脏黑客清除了元素l1中的:active pseudoclass(基本上是从文档中删除它):

var next = l1.nextSibling;
document.body.removeChild(l1);
document.body.insertBefore(l1, next);

问题是,document.activeElement显然引用刚刚获得mousedown的链接(它们没有那么关注),所以我无法知道当前哪个元素是:活跃。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全明白你要做的是什么,但你可以使用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);
} 

工作演示:http://jsfiddle.net/AndyE/LkAXd/3/

由于您标记了,我假设您可以控制环境,而不必担心旧版浏览器。