2

我要拔头发了!!呜呜呜……

似乎有效:

//get all the foo and bar links that point to a named anchor:
$("a.foo,a.bar").filter("[href^=#]").click
(
    function()
    {
        doSomething( $(this).attr("href").substr(1) );
        return false;
    }
);

当我将 '$(this).attr("href").substr(1)' 的输出记录到控制台时,对于所有相关链接,我看到了没有哈希的锚名称。都好。但是在 doSomething() 中,typeof() of 说我有一个字符串——但它是空的!!为什么?!!

function doSomething(str)
{
    //log str : it's empty!!
}

通常在我在这里发布问题后不久,任何人都无法帮助我,否则我稍后会发现自己的愚蠢。我希望这次有人能帮忙!:-(

==============已解决=====================

**********这是我自己的愚蠢**********

在 doSomething 里面,我的代码做的第一件事是:

if(str = "") return;

(拍了拍额头)。谢谢大家让我以不同的方式凝视这个

4

3 回答 3

1

我无法重现这个。听起来像是doSomething代码本身的问题 - 进行快速代码审查以确保您指向正确的函数并且您没有在使用前修改参数。

于 2010-01-18T20:56:36.807 回答
0

注意:这不是正确答案!但我会把它留在这里,以防它对其他 Sizzle 用户有用。


这是 Sizzle(jQuery 使用的选择器库)中的一个错误。

问题是当你link.href在 JavaScript 中访问时,你没有得到href属性的文本,你得到的是解析的绝对 URL。这自然是从http://and not开始的#

当您调用link.attr('href')jQuery 时,会检测到特殊情况并应用解决方法。当您使用选择器时,Sizzle 不会。它尝试:

attrHandle: {
    href: function(elem){
        return elem.getAttribute("href");
    }
},

但是这种解决方法不适用于 IE 版本 7,因为它们getAttribute等于只获取 JavaScript 属性。[正确的解决方法是getAttributeNode改用,或嗅探 IE 并使用专有getAttribute('href', 2)扩展。]

所以选择器引擎获取http://...了 href 属性,当然这永远不会匹配^=#

如果您自己使用过滤器功能进行操作,它应该可以工作:

$('a.foo, a.bar').filter(function() {
    return $(this).attr('href').substring(0, 1)==='#';
})...
于 2010-01-18T21:00:48.933 回答
-2

尝试substr(0)第一个字符位于索引 0 http://www.w3schools.com/jsref/jsref_substr.asp

于 2010-01-18T20:56:25.560 回答