我经常在jQuery选择器中看到字符串连接:
var $field = $('.' + field, $form);
var $label = $('label[for="' + $field.attr('id') + '"]');
var $elem = $('#' + elem);
由于periods and colons are valid in element ids(谁知道其他属性可能是什么),这样的代码是不是有潜在危险?
我发现有些选择器以任何其他方式写作并不容易 - 所以标准做法是什么?原生DOM方法并不总是可用。
我总是避免使用ids之类的奇怪字符,但是当编写工具供其他人使用时,最好避免这种警告。
答案 0 :(得分:0)
如果您完全控制字符串中的内容,那么这不是问题,但对于库工具来说,这将是一个问题。
只是不接受该工具的名称或标识,接受完整的选择器或元素/ jQuery引用。这样,使用该工具创建工作选择器的人就有责任。
答案 1 :(得分:0)
只要您控制field
和elem
中的内容,您的第一个和第三个示例就很常见且无害。
我从不使用第二种形式,并且会这样写:
var match = $field.attr('id'); // or $field[0].id
var $label = $('label').filter(function() {
return this.getAttribute('for') === match;
});
因此,完全避免担心转义match
的内容。