1

重複の可能性:
jQuery .hasClass() と .is()

HTML コード:

<div class="results">
    <div class="table">
        <form class="tr" action="#" method="post">
            <div class="td">
                <input class="datepicker" type="text">
            </div>
            <div class="td">
                <input class="datepicker" type="text">
            </div>
            <div class="td">
                <input type="text">
            </div>
        </form>
    </div>
</div>

JS コード:

$('.results').find('input:text').each(function(){
    var element = $(this);
    var b = element.hasClass('.datepicker');
    var c = element.is('.datepicker');
}

私の質問:

「is」と「hasClass」は、クラス「datepicker」を含む要素が見つかったときに両方とも true を返すはずですよね?

どういうわけか、そうではありません。「hasClass」は false を返し、「is」は true を返します。

また、チェーンjquery呼び出しを行うための解決策を探していました。ただし、「hasClass」と「is」はどちらもブール値のみを返します。$(Jquery) 要素を返す JQuery 関数があるので、このようなことができますか? すでに「フィルター」機能を試しましたが、うまくいかないようです。

element.SomeFunctionToDigUpAnElementWithClass('datepicker').DoSomeCoolStuff();

================================================== ==============

4

3 に答える 3

8

hasClassもちろん、それはクラス名であるため、ドットなしで。is一方、任意のセレクター。

element.hasClass('datepicker');
于 2013-02-05T15:23:06.367 に答える
5

hasClass()より具体的で高速な操作です。is() を使用すると、より広い範囲を選択できます。たとえば、次のことができますis(':checked')

http://jsperf.com/hasclass-vs-is-so

于 2013-02-05T15:23:48.893 に答える
1

チェーンを維持するには、セレクターを変更する必要があります。

$('.results').find('input:text.datepicker').doSomething();

または、each各入力要素の次の関数に特定のパラメーターを渡す必要がある場合:

$('.results').find('input:text.datepicker').each(function(){
    doSomething();
});

datepicker クラスを設定せずに入力に対して何かを行う必要がある場合は、:notセレクターを使用します。

$('.results').find('input:text:not(.datepicker)').doSomething();

またはなしでもfind

$('.results input:text.datepicker').doSomething();
于 2013-02-05T15:30:05.713 に答える