prop と attr の全体像は理解できたと思っていましたが、その理解に疑問を抱くケースに遭遇しました。
テーブルを生成するバックボーン ビューのテストを作成していましたが、テストでは基本的に次のことが行われました。
// assert that $table.find('input[value="foo"]').length == 2
$table.find('input[value="foo"]:first').val('bar');
// assert that $table.find('input[value="foo"]').length == 1
奇妙な部分は、その 2 番目のアサーションが失敗したことです。何度も頭をぶつけた後、私はついに試しました:
// assert that $table.find('input[value="foo"]').length == 2
$table.find('input[value="foo"]:first').attr('value', 'bar');
// assert that $table.find('input[value="foo"]').length == 1
見よ、私のテストは合格した。
さて、関連するすべてのコードでフィドルを投稿できたらいいのにと思いますが、多すぎます (テーブル ビューだけで 685 行です)。あなたのコード」。そして、私が理解しようとしているのは、なぜ次のような場合があるのでしょうか?
$table.find('input[value="foo"]:first').val('bar');
何もしませんが、次のことを行います。
$table.find('input[value="foo"]:first').attr('value', 'bar');
期待どおりに動作しますか?
PS私.val('bar')
は何もしなかったと言うべきではありません。後で行った場合.val()
、値が変更されたことが示されます...しかし、実際の要素を確認したり、新しいセレクターを使用したり、そのようなものを使用したりすると、val
実際には何も変更されていないことが明らかになりました。これは私をさらに混乱させるだけです。