1

私は jQuery にかなり精通していますが、ほとんどの人が知っているように、jQuery とバニラ JavaScript には大きな違いがあります。私はバニラ JavaScript をより深く理解しようとしていますが、いくつかのコードといくつかの質問があります。

以下のコードでは、Writeboard.com ( http://37signals.com/writeboard-retiredは廃止されました) からエクスポート機能を介して生成された HTML を取得しようとしています。基本的に、私はいくつかの有用な練習を行い、特定のコンテンツを見つけるスクリプトを作成しようとしています。たとえば<li>//Title:...</li>、それを JSON 配列にプッシュし、それを XML として解析します。最終的な目標は、これらすべてを XML として取得して移植性を高めることです (従来の Writeboard.com ボードから離れて、作業中の Web アプリに直接インポートすることもできます)。

だから、私には行く方法があり、私のためにコードを書いてくれる人を探しているわけではありませんが、いくつかのことに気を配ろうとしています:

  • TargetListユーザーが次のように配列を渡して、検索される特別な「キー」(値) をスクリプトに伝えることができるコールバックを作成しようとしています。親<li>のコンテンツは抽出され、JSON 配列に保存されるため、<li>含まれている要素を破棄して XML 属性 (例: <title>) で代わりにラップできます。

  • JS で配列を設定するための適切な構文についての私の理解はvar targetList = [];、スクリプトの側面を検索、検索、および保存することをループするときに後で入力できる空の配列を作成することです。これを間違って設定したと思いますが、その理由はわかりません。

    • また、スクリプトの後半で関数を呼び出すことができない理由についても混乱しconvertToXML(['//Title:','//Prerequisite:','//Description:']);ています。エラーが発生し、その理由がわかりません。私が得ていたエラーは、私が不適切にターゲットを設定していたという私の仮定をもたらしたのでdocument.ready、スクリプトの後半で以前の関数を呼び出すときに不要であることがわかった関数をラップして作成しましたが、理由はわかりません困っていました。

これのいくつかは、私がまだ学んでいる OOP の原則に関係していることを認識しています。とても感謝しています!

( function ($) { // wrap jQuery to prevent conflicts

    $(document).ready(function () {

        function convertToXML (targetList) {

            var targetList = [];

            var i = 0; 
            while (i<=targetList.length) {
                var target = targetList[i];
                targetList.push( target );              
                i++;
            };
        };

        $(document).ready(function() {
            convertToXML(['Title:','Prerequisite:','Cost:','Description:','Effect:','Categories:' ]);
        });     


    }); // end document.ready

} ) ( jQuery );
4

1 に答える 1

3

2 番目の質問にはお答えできますが、最初の質問について詳しく説明していただく必要があります。

ページの後半で呼び出すことができない理由convertToXMLは、スコープでラップしたためです。(実際には2つに分かれています。)

function($) {
    // creates an anonymous function which takes one parameter (named $)
}

(function($) {
    // creates an anonymous function which takes one parameter,
    // and immediately calls it, passing the variable named jQuery to the parameter named $
})(jQuery);

これは、他のライブラリが特別な $ 変数名を引き継ぐことがあるという問題を解決するために jQuery を使用する一般的なパターンです。しかし、理解することが重要なのは、その匿名メソッド内で定義したものは、メソッドの外部からアクセスできないということです。したがって、convertToXML外部からメソッドにアクセスする場合は、その定義をそのブロックの外に移動する必要があります。

加えて:

$(document).ready(function () {
    // create an anonymous function, and pass it to jQuery's document.ready method,
    // jQuery will call your function when the DOM is loaded.
});

あなたはこれを2回行っています...そして、DOMがロードされたときに呼び出される最初の内部にあるため、2番目のものは呼び出されず、DOMは1回だけロードされると確信しています。これらのいずれかを削除します。

于 2012-05-30T22:57:42.117 に答える