2016-03-28 19 views
3

HTML div要素からクラス名を取得して既存のオブジェクトに追加しようとしています。私はそれを動作させることができますが、すべての構文エラーチェッカーには、コードが間違っていると言われています。私はかなり徹底的に検索しましたが、実際にどのように質問を語るかわかりません。ここでは、エラーをスローしませんコードは次のとおりです。jQueryオブジェクトにHTMLクラス属性を追加しようとしています

$.each($(objDiv).children('div'), function(){ 
    var field = $(this).attr('class'); 
    var value = $(this).text(); 
    var add = { field : value }; 
    $.extend(obj, add); 
}); 

しかし、問題は、それは、フィールド

オブジェクト {ラベルの文字列リテラルとしての「場」を置くことである:「level3a」、 フィールド: "正式に持続可能な専門知識の後にクライアント中心の成果を向上させる。"}

オブジェクト {ラベル: "level3a"、フィールド:「ユビキタスメタサービスなしでクリック&モルタルデータを完全に取り込みます。」}

クラス名の値ではありません。それを回避するために、私は "フィールド" の周りに括弧を置く:

$.each($(objDiv).children('div'), function(){ 
    var field = $(this).attr('class'); 
    var value = $(this).text(); 
    var add = { [field] : value }; 
    $.extend(obj, add); 
} 

そして、それは私に私が探している結果を、与え

オブジェクト {ラベル: "level3a"、にClassA: "正式に持続可能な専門知識の後にクライアント中心の成果を向上させる。"}

オブジェクト {ラベル: "level3a"、ClassBの:を「完全にCLIを受け入れますユビキタスメタサービスのないcks-and-mortarデータ "}

しかし何とか間違っています。私がここで間違っていることや、これを達成するためのよりよい方法に関するアイデアはありますか?

答えて

3

なぜそれが間違っているのか(それがなぜ問題なのか)はわかりませんが、私はあなたにもっと正しい方法を教えてくれます。

あなたはそうのような空のオブジェクトとしてaddを宣言したい:add = {};

次に、あなたがそうのようなそれにプロパティとしてフィールドを追加することができますadd[field] = value;

これは、モデルとあなたのオブジェクトaddを与えます:{ ClassA: "Your text here" }

詳細情報については、プロパティアクセサーのタイプを参照してください。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors。上記の詳細な方法は、「ブラケット記法」

編集使用しています:あなたが書いたものECMA6にそう明らかにComputedPropertyNameと呼ばれるものを使用して、有効なJavaScriptです。しかし、まだすべてのブラウザでサポートされているわけではないので、ECMA6のブラウザサポートが良くなるまで、大括弧表記のプロパティ名メソッドを使う方が良いです。詳細については、この回答を参照してください。https://stackoverflow.com/a/2274327/2748503

+0

それは私には実用的な解決策を得ました - 答えと追加情報のおかげで! –

+0

ねえ、私の編集をチェックして、私はあなたのコードが動作する理由の答えを見つけました。 –

関連する問題