2

div親にクラスの子供がいる場合は条件がありますが、そうでない場合はそう.adsする必要がありalert('true')ますalert('false')。しかし、私の関数はtrueどちらの場合も戻ります。これがjsFiddleリンクですhttp://jsfiddle.net/F3EXf/

<head>
    <script type="text/javascript" src="jquery-1.7.2.js"></script>
    <script type="text/javascript">
        $(function(){
            if($('#me').find('.ads')){
                alert('true')
            } else {
                alert('false')
            }
        });
    </script>
</head>
<body>
    <div id="me">
        <div class="noads">aaaa</div>
    </div>
</body>

こんにちはvega下のスクリーンショットをご覧ください

ここに画像の説明を入力してください

4

5 に答える 5

9

要素が存在するかどうかを確認するには、代わりに使用してください

if ($('#me').find('.ads').length) {
   ...
}

対象の要素が存在しない場合でも、$('#me').find('.ads')常にtrueを返します(true値として評価されたjQueryでラップされた空のオブジェクトを返します)。find()

于 2012-09-05T12:47:33.343 に答える
3

すべてのjQueryセレクタートラバース関数はjQueryオブジェクトを返します。jQueryオブジェクトは、プロパティとコア関数への参照を持つ配列のようなオブジェクトです。

jQueryオブジェクトhttp://jsfiddle.net/Tj9e8/1/ですぐに利用できるプロパティと関数のリストを示す小さな例

jQuery関数をとして呼び出すと$(selector)、セレクターに基づいて一致した要素のラップされたリストを使用してjQueryオブジェクトが作成されます。

次に例を示します。これを行う$('#test')と、jQueryオブジェクトが作成され、DOM要素がIDでラップされますtest

.initIDセレクターの処理については、jQueryの関数からの以下のコードスニペットを確認してください

elem = document.getElementById(match[2]); 
//match[2] is string 'test' in '#test' that was passed to $('#test')

if (elem && elem.parentNode) {
   if (elem.id !== match[2]) {
      return rootjQuery.find(selector);
   }
   //below 2 lines allows the jQuery object to behave like array like objects
   this.length = 1;
   this[0] = elem; //elem is nothing but the dom node.
}
this.context = document;
this.selector = selector;
return this; //Returns jQuery object

詳細については、.init機能コードを確認してください

以下はのスナップショットです$('#test')

ここに画像の説明を入力してください

ご覧のとおり、長さは0ですが、それでも$関数は長さ0のjQueryオブジェクトを返します。これは、エラーをスローするのではなく、次の連鎖呼び出しを保護するためです。

ほとんどの場合、要素を選択してその要素で関数を実行します。

例: $('#test').addClass('example')

  1. $('#test')文字列引数を使用してのjQuery関数を呼び出す'#test'
  2. jQueryは上記を呼び出し.initて引数のタイプを判別し、一致する要素でラップされたjQueryオブジェクトを返します(存在する場合は、jQueryオブジェクトのみ)。
  3. jQueryオブジェクトを呼び出し.addClassます。これは、一致した要素のリストを内部的に反復処理し、クラスを要素に追加します。以下は.addClass関数コードの抜粋です

    if (value && typeof value === "string") {
        classNames = value.split(core_rspace);
        for (i = 0, l = this.length; i < l; i++) { 
        //^-- This is where it iterate over matched elements
            elem = this[i];
            if (elem.nodeType === 1) {
    

ここで注意すべき点は、

  1. $関数は常にjQueryオブジェクトを返します
  2. jQueryオブジェクトは、次のようなjavascriptオブジェクトに他なりません。

    a。一致した要素のラップされたセット.findを使用した例

    b。プロパティ-プロパティを一覧表示するサンプル

    c。関数-関数を一覧表示するサンプル

HTML:

<ul>
    <li>Test</li>
    <li class="red">Test</li>
    <li>Test</li>
    <li class="red">Test</li>
</ul>

JS:

var $lisample = $('ul').find('.red');

.find以下のように、一致した要素のラップされたセットではありません。

ここに画像の説明を入力してください

もっと読む

  1. jQueryオブジェクトはどのように配列を模倣しますか?
  2. jQueryオブジェクトとDOM要素
  3. http://blog.buymeasoda.com/does-calling-the-jquery-function-return-an-ob
于 2012-09-07T17:06:25.450 に答える
1
 $(function () {
        if ($('#me').find('.ads').length>0) {
            alert('true');
        } else {
            alert('false');
        }
    });
于 2012-09-05T12:49:15.767 に答える
1

私は通常これを行います:

if(typeof variable != 'undefined')

だからあなたの場合:

if(typeof variable[0] != 'undefined'){

.find関数は配列を返すためです。

コード

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $(function(){
                var variable = $('#me').find('.ads');
                if(typeof variable[0] != 'undefined'){
                    alert('true')
                } else {
                    alert('false')
                }
            });
        });
    </script>
</head>
<body>
    <div id="me">
        <div class="noads">aaaa</div>
    </div>
</body>
</html>

typeof variable != 'undefined' あなたはここについての情報を見つけることができます。

于 2012-09-09T20:02:24.707 に答える
0

フィドルリンク: http: //jsfiddle.net/F3EXf/8/

1.要素の子を探す必要がある場合は、すぐにChildren()を使用します。2.また、セレクターから得られた要素を数えてみて、それが利用可能かどうかを判断します

$(function(){
    var children = $('#me').children('.noads');
if(children.length > 0){
    alert('true')
    }

    else {
        alert('false')

        }
})

</ p>

デモについては、上記のフィドルリンクを探してください。

あなたの質問に答えるために、要素が存在しない場合になぜそれが真であると警告するのか。

  1. 空の配列を返しますが、null配列は返しません...結果のオブジェクトに情報が含まれているが、長さが「ゼロ」であることを意味しますが、実際にはnullまたは未定義ではありません
于 2012-09-10T14:01:08.950 に答える