我以为我理解了整个 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
奇怪的是,第二个断言失败了。经过大量的头撞墙时间后,我终于尝试了:
// 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
瞧,我的测试通过了。
现在,我希望我可以发布所有相关代码的小提琴,但是太多了(表 View 单独是 685 行),但我正在寻找一般理解类型的答案,而不是特定的“修复 X in你的代码”。我想了解的是,为什么会有这样的情况:
$table.find('input[value="foo"]:first').val('bar');
什么都不做,同时:
$table.find('input[value="foo"]:first').attr('value', 'bar');
按预期工作?
PS我不应该说.val('bar')
什么都没做;如果我.val()
后来做了,它会显示值已经改变......但是如果我检查了实际元素,或者使用了新的选择器,或者类似的东西,很明显它val
并没有真正改变任何东西。这只会让我更加困惑。