Ответ 1
Не совсем. .val()
используется для установки атрибута поля формы value
, поэтому экранирование там действительно не требуется. Вы будете устанавливать значение через DOM, поэтому вам не нравится, что вы создаете HTML через конкатенацию строк. .prop()
, с другой стороны, даже не взаимодействует с атрибутами вообще - просто свойства DOM, поэтому вам не нужно работать с HTML, также выходящими из них.
Изменить: для разъяснения я предполагаю, что вы спрашиваете об этом, потому что вас беспокоит .prop()
или .val()
как вектор атаки XSS (или просто возможность застрелить себя в ноге )? В этом случае вы должны помнить, что при настройке атрибутов и свойств через DOM установленные вами значения по существу изолированы от атрибута или значения, с которым вы взаимодействовали. Например, учитывая следующее:
<div id="foo"></div>
И вы пытались злоупотреблять значением атрибута, например:
$('#foo').attr('rel', '"></div><script>alert("bang");</script><div rel="');
Вы можете быть обеспокоены тем, что это приведет к следующему:
<div id="foo" rel=""></div><script>alert("bang");</script><div rel=""></div>
Это никогда не произойдет. У вас действительно будет атрибут rel
со злой строкой в качестве значения, но не будет создана новая разметка или узлы DOM. Сама строка не экранирована - ее просто не интерпретируют как разметку. Это просто строка и что она.