1

jQuery から jqLit​​e にいくつかの関数を追加しようとしているので、角度のあるアプリで jQuery ライブラリ全体をロードする必要はありません。この記事で Ben Nadel が使用した手法を使用しています。

http://www.bennadel.com/blog/2753-creating-jqlite-plugins-in-angularjs.htm

このような closestChild プラグインの実装が困難になっています。

https://github.com/lolmaus/jquery.closestchild/blob/master/jquery.closestchild.js

明らかに私は少し書き直したので、このようになります。

JQLite.prototype.closestChild = function(selector) {

            var $children, $results;

            $children = this.children();

            if ($children.length === 0){
                return $();
            }

            $results = $children.filter(selector);

            if ($results.length > 0){
                return $results;
            }
            else{
                return $children.closestChild(selector);
            }

        };

...しかし、このエラーにつながります。

Error: [jqLite:nosel] http://errors.angularjs.org/1.4.0-rc.0/jqLite/nosel

そこで、エラーを検索したところ、何らかの理由で jqLit​​e がセレクターと一致できず、タグ名のみが一致することがわかりました (これは役に立ちますか?)。私が理解できないのは、その記事の Ben の .filter() 関数と一緒に実行されていることです。これは、セレクターを指定すると正常に動作するようです。これは、この行で呼び出している関数とまったく同じです。

$results = $children.filter(selector);

それで、私の質問は、 $children をループして、それらのいずれかがプレーンな JavaScript を使用して渡されたセレクターまたはその他の回避策と一致するかどうかを確認する方法はありますか?

4

1 に答える 1

1

「セレクター」に何を期待しているのかわかりませんが、セレクター (Ben Nadel のコードに従う) は、コールバックまたは DOM ノードのいずれかです。

だからそれはあるだろう

angular.element(document.body)
.find('div')
.closestChild(function(el) {
    var element = angular.element(el);
    console.log(element);
    return !!element.text();
});

jqLit​​e のセレクターのサポートは、マニュアルの状態とまったく同じgetElementsByTagNameですfind

「より重い」jqLit​​e 実装については、このプロジェクトとそのプロジェクトを確認できます (これらは非常に新しいもので、まだ実際に試していないので、感想を自由に共有してください)。

于 2015-04-23T19:44:11.840 に答える