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() は文字列を持っていると言いますが、それは空です!! どうして?!!

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://なくで始まります#

link.attr('href')jQueryを呼び出すと、特別なケースが検出され、回避策が適用されます。セレクターを使用すると、Sizzle は使用しません。それは試みます:

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

ただし、この回避策はバージョン 7 までの IE では機能しません。これ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 に答える