我正在使用一个网站,其中所有内容都是使用jquery通过ajax回发呈现的。我正在使用Ben Alman的hashchange(http://benalman.com/projects/jquery-hashchange-plugin/)来管理哈希历史记录,它允许我为页面添加书签,使用后退按钮等...当然,除了IE 9之外,其他所有内容都能完美运行。在IE中存在一个小问题,“访问”链接未标记为已访问。在加载新内容之前单击链接后,您可以看到该链接在一瞬间变为紫色(已访问)。但是,一旦单击后退按钮,链接就会显示为从未访问过。这是我正在谈论的一个例子: http://jsfiddle.net/7nj3x/3/
这是jsfiddle代码,假设你有jquery和head中引用的hashchange插件:
$(function(){
// Bind an event to window.onhashchange that, when the hash changes, gets the
// hash and adds the class "selected" to any matching nav link.
$(window).hashchange( function(){
alert("Hash changed to:"+location.hash);
var hash = location.hash;
// Set the page title based on the hash.
document.title = 'The hash is ' + ( hash.replace( /^#/, '' ) || 'blank' ) + '.';
//simulate body being rendered by ajax callback
if(hash == ""){
$("body").html("<p id='nav'><a href='#test1'>test 1</a> <a href='#test2'>test 2</a> <a href='#test3'>test 3</a></p>");
}
else{
$("body").html("Right click within this pane and select \"Back\".");
}
})
// Since the event is only triggered when the hash changes, we need to trigger
// the event now, to handle the hash the page may have loaded with.
$(window).hashchange();
});
答案 0 :(得分:2)
您可以简单地使用IE条件注释来加载特定样式:
<!--[if IE]>
a:visited {
padding-left: 8px;
background: url(images/checkmark.gif) no-repeat scroll 0 0;
}
<![endif]-->
答案 1 :(得分:0)
为什么不设置仅供IE使用的代码块来设置隐藏输入标记的值以反映点击行为。如果单击一个链接,您可以将输入标记的值设置为等于该链接ID,并允许您更新元素类以反映更改。
HTML if IE
<input type="hidden" id="clicked_link" />
JQuery JS if IE
$(function() {
$(a).click(function() {
$(this).attr('id').addClass('visited_link_class');
});
});
CSS
.visited_link_class { color:#your color;}
答案 2 :(得分:0)
也许如果您在将其附加到文档之前创建正确的元素并构建DOM片段。
不确定它是否会起作用,无法在此进行测试,但这是我尝试调整您的代码。
$(function(){
// Bind an event to window.onhashchange that, when the hash changes, gets the
// hash and adds the class "selected" to any matching nav link.
$(window).hashchange( function(){
alert("Hash changed to:"+location.hash);
var hash = location.hash;
// Set the page title based on the hash.
document.title = 'The hash is ' + ( hash.replace( /^#/, '' ) || 'blank' ) + '.';
//simulate body being rendered by ajax callback
if(hash == ""){
$("body").html(
$("<p>").id("nav")
.append($("<a>")
.attr("href","#test1")
.text("teste 1"))
.append($("<a>")
.attr("href","#test2")
.text("test 2"))
.append($("<a>")
.attr("href","#test3")
.text("test 3"))
);
}
else{
$("body").text("Right click within this pane and select \"Back\".");
}
})
// Since the event is only triggered when the hash changes, we need to trigger
// the event now, to handle the hash the page may have loaded with.
$(window).hashchange();
});
答案 3 :(得分:0)
尝试考虑css LVHA角色,这意味着标签伪类的顺序很重要。
第一次定义这些类:
如果这仍然无法解决您的问题,您可以使用另一个js路由器(hashchange):https://github.com/flatiron/director 我经常使用这个,它在很多情况下都能很好地工作。
答案 4 :(得分:0)
一个选项是使用HTML5历史记录API伪造浏览器历史记录。这种方式只有在删除浏览器历史记录后,链接才会被“取消访问”。
上面的[...]方法用地址栏中的URL切换出来 '/ hello'尽管没有请求资产且窗口仍然存在 同一页面。但这里有一个问题。击中后面 按钮我们会发现我们没有返回到本文的URL但是 相反,我们会回到之前的任何页面。这是 因为replaceState不会操纵浏览器的历史记录 只需替换地址栏中的当前URL即可。
所以,就像在该页面上提到的那样,你必须做一个:
history.pushState(null, null, hash);
答案 5 :(得分:0)
You can simply use IE conditional comments to load a specific style:
<!--[if IE]>
a:visited {
padding-left: 8px;
background: url(images/checkmark.gif) no-repeat scroll 0 0;
}
<![endif]-->
答案 6 :(得分:-1)
这是ie中的安全功能。在许多现代浏览器中,访问的功能受到限制,以防止CSS利用。 因此,这个问题没有解决方法。