【问题标题】:JQuery : selector chain with attribute filter : result does not persist?JQuery:带有属性过滤器的选择器链:结果不持久?
【发布时间】:2011-01-06 13:03:01
【问题描述】:

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

似乎有效:

//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;

(拍拍额头)。谢谢大家让我以不同的方式看待这个问题

【问题讨论】:

    标签: jquery attributes css-selectors chaining


    【解决方案1】:

    I can't reproduce this. 听起来像是doSomething 代码本身的问题 - 进行快速代码审查,以确保您指向正确的函数并且在使用前没有修改参数。

    【讨论】:

    • omg...谢谢您关于“修改论点”的评论...我觉得很愚蠢。我已经完成了 'if(str = "") return;你能发现问题吗?嗯……
    【解决方案2】:

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


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

    问题是当您在 JavaScript 中访问 link.href 时,您不会获得 href 属性的文本,而是获得解析的绝对 URL。当然,这以http:// 开头,而不是#

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

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

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

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

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

    $('a.foo, a.bar').filter(function() {
        return $(this).attr('href').substring(0, 1)==='#';
    })...
    

    【讨论】:

    • 啊...在这种情况下看起来没问题。 Sizzle 确实有这个错误,但当前版本的 jQuery 猴子补丁有问题的功能来修复它! [jQuery 1.3.2 的第 2196 行。]
    【解决方案3】:

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

    【讨论】:

    • 我认为他是故意试图省略 #。
    • ...这是什么意思? xD 输入总是受到赞赏,但赞赏输入并说它是错误的并不是相互排斥的。
    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多