0

こんにちは、これはIE8で動作しているようです:

var clsName = link.parents("div.fixed_column").attr("class").split(" ");

if($.inArray("column_one", clsName)

これはエラーを報告しますが(オブジェクトはjqueryでエラーを予期しました)。

var clsName = link.parents("div.fixed_column").attr("class");

これを行う正しい方法は何ですか?inArray の目的は、jquery がクロス ブラウザーの問題を処理することだと思いました。

4

2 に答える 2

4

残念ながら、これはあなたの質問に間接的に答えていますが...要素にクラスがあるかどうかを検出しようとしているようです。すでにjQueryを使用しているので、hasClassメソッドを使用してください - http://api.jquery.com /hasClass/

特定のコードについては、次を試してください。

if (link.parents("div.fixed_column").hasClass("column_one")) {
    // It has the "column_one" class
}

あなたの質問に対するより直接的な答えlink.parents("div.fixed_column").attr("class")は、単一の文字列を返すことです。jQuery セレクター ( div.fixed_column) が複数の要素を返す場合、これはクラスを使用する場合に非常に可能性が高く、情報を取得する jQuery メソッドを使用すると (たとえば、.attr1 つのパラメーターを使用して値を「取得」する)、最初に一致した要素の値のみを返します。

セレクターが 3 つの要素に一致するとします。

["<div id='div30' class='fixed_column div30_class'></div>",
 "<div id='div2' class='fixed_column div2_class'></div>",
 "<div id='div17' class='fixed_column div17_class'></div>"]

次に、から返される値は次の.attr("class")ようになりますfixed_column div30_class。最初に一致した要素だからです。

よくわかりませんが、jQuery が一致したすべての要素の値の配列を返すことを期待していると思いますが、そうではありません。したがって、jQuery がクロスブラウザーの問題を処理していないという意味ではありません。メソッドが何をするか、何を返すかを調べる必要があるだけです。

jQuery 2.0には、ゲッター(または同様のもの)を直接呼び出すことから、あなたが望むことを行うためのオプションがあると誓うことができましたが、もう見つけることができません:(多分私は間違って覚えています.とにかく、あなたは簡単に使用できます$.eachおよび/または$.map一致したすべての要素を確認しますが、実際に何をしようとしていたかによって異なります。

于 2013-03-19T19:46:19.107 に答える
1

を使用して、複数の要素の属性を配列に読み取ることはできません.attr("class")。しかし、このようにセレクターで目的のクラスをターゲットにしてみませんか?

var cols = link.parents("div.fixed_column.column_one");

次に、空のセットをチェックするように条件を変更します。

if(cols.length) { ...
于 2013-03-19T19:45:42.090 に答える