来自.attr的jquery值在IE中不正确

时间:2011-07-20 14:30:54

标签: php jquery substr

对于我的一个javascript函数,我使用jqueries .attr方法从我的分页值中检索href值。电话只是

$(".pager").click(function(){
    var start = $(this).attr('href');
    alert("START: " + start);
}

html看起来像这样:

<a href="#10" class="pager"><span class="page_no">2</span></a>
<a href="#20" class="pager"><span class="page_no">3</span></a>
...

在FF和Chrome中,我看到Start值为10(单击第一个href)。 在IE中,它返回整个HTML(例如)

mysite/search_results.php#10

我甚至尝试过像这样使用子字符串:

var start = $(this).attr('href').substr(1);

但是这也返回了URL,而不是我地址中的第一个字符:

ysite/search_results.php#10

有任何想法或建议吗?

5 个答案:

答案 0 :(得分:2)

试试这个:

$(".pager").click(function(){
    var hashSplit = this.href.split('#');
    var start = hashSplit[hashSplit.length -1];
    alert("START: " + start);
});

小提琴:http://jsfiddle.net/maniator/PCJEF/

我已经过测试,它可以在IE中运行

答案 1 :(得分:1)

您可以执行类似

的操作
if ($.browser.msie) {
    var start = $(this).attr('href').slice($(this).attr('href').indexOf('#')+1));
} else {
    var start = $(this).attr('href');
}

这段代码没有经过测试或确切,但你得到的要点 - 如果你在IE中,获取'#'的位置并从那里获得一个子串到最后,否则使用href的整个值

答案 2 :(得分:0)

IE愚蠢,这样做:

var start = $(this).attr('href').replace(document.location.pathname,'');

答案 3 :(得分:0)

听起来这可能与javascripts在返回url时的默认行为有关(类似于image src,返回完整路径)。您可以尝试在#上使用javascript拆分方法http://www.w3schools.com/jsref/jsref_split.asp,然后获取值。这应该在Chrome和FF中返回10,20,因为它将在#上拆分而不包含它。第二部分应该始终是数字:

   var s = $(this).attr('href').split('#')[1];
   alert(s);

答案 4 :(得分:0)

我相信虽然attr方法旨在减少浏览器之间的差异,但并不总是如JQuery的网站所说:

  

跨浏览器一致性:某些属性的值在浏览器之间报告不一致,甚至跨单个浏览器的版本报告。 .attr()方法减少这种不一致。

所以这只会减少这种机会;它并没有消除它。

所以,我认为我能看到修复它的唯一方法是使用某些人的回答看起来像TommyBs的答案很有希望使用这段代码:

 var s = $(this).attr('href').split('#')[1];

这是一个有解决方案的论坛: http://www.sitepoint.com/forums/javascript-15/jquery-href-value-problem-665692.html