javascript - 在 Chrome 下更改其 href 属性时更新链接的访问状态

标签 javascript html google-chrome hyperlink safari

当我使用 JavaScript 更新链接时

$('#link_id').attr('href', some_new_url)

无论新 URL 地址的状态如何,已访问/未访问链接的颜色主题都会持续存在。

有没有办法更改链接地址,迫使浏览器重新检查其访问状态?

进一步说明:

我(在 OSX 10.8 上)在 Chrome (32) 和 Safari (6.1) 中遇到此问题。在 Firefox (26) 中,链接状态会根据需要自动更新。

上面的例子是在 jQuery 中,但问题与普通 JavaScript 是一样的,即 document.getElementByIdsetAttribute .

(如果可能的话,我宁愿避免删除和添加 <a></a> 。)

编辑:

最小(非)工作示例(作者:Joeytje50):http://jsfiddle.net/3pdVW/

最佳答案

明确答案

要解决此问题,您只需完全删除 href 即可强制浏览器重新计算样式。属性,然后立即将其重新添加回来。这将使浏览器首先计算样式,因为 <a>不再是没有 href 的链接,然后添加 href你想给它。代码将是:

$('#link_id').removeAttr('href').prop('href', some_new_url);

Demo

PS:在本例中,使用 .attr('href', some_new_url);可能同样可以正常工作。

之前的尝试

我的想法是这是一个渲染故障。当 :visited 时,它不会重新计算样式。状态因脚本而改变。 This你的问题的最小例子很好地说明了这一点。您可以尝试以下任一方法:

使用元素的属性

问题可能是您正在更改属性,这又会更改 href 属性。如果直接更改 href 属性,它可能会起作用。您可以通过 jQuery.prop 执行此操作,这将使用以下代码来更改链接:

$('#link_id').prop('href', some_new_url);

Demo 。我对这个其实不抱太大希望,但值得一试。我怀疑效果会更好的是:

强制重新计算样式

如果您想强制重新计算样式,您只需更改要更新的最高元素上的类即可。由于您正在更新 <a>单独的元素,你需要这样的东西:

$('#link_id').prop('href', some_new_url).toggleClass('webkit-force-recalculate');

Demo

我认为这很有可能达到目的。

<小时/>

如果这些方法都不适合您,您当然可以使用 maximgladkov's solution .

关于javascript - 在 Chrome 下更改其 href 属性时更新链接的访问状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21838836/

相关文章:

html - 覆盖 css 播放按钮

google-chrome - Selenium 崩溃: Chrome automation extension has crashed

jquery - Bootstrap 选项卡 : strange behaviour in ios chrome

javascript - MouseMove 事件未在 Chrome 中触发

javascript - 我在我的代码中使用标签。但是 javascript 一直报错 'label is not a statement.'

javascript - Tooltip 组件渲染但不可见,并且不是 z-index

html - 此标记的偶数和奇数伪

javascript - 在 ES6 中如何根据另一个对象的详细信息从一个对象获取对象详细信息

javascript - 创建 React App ,所有测试用例都因 1 个错误而失败

javascript - 打开页面时执行 JavaScript