0

对于我的一个 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

有什么想法或建议吗?

4

5 回答 5

2

试试这个:

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

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

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

于 2011-07-20T14:39:05.187 回答
1

你可以做类似的事情

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

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

于 2011-07-20T14:37:28.253 回答
0

IE是愚蠢的,这样做:

var start = $(this).attr('href').replace(document.location.pathname,'');
于 2011-07-20T14:35:48.367 回答
0

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

   var s = $(this).attr('href').split('#')[1];
   alert(s);
于 2011-07-20T14:37:11.527 回答
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

于 2011-07-20T14:43:09.537 回答