栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在将用户输入添加到Javascript的DOM中之前,先对其进行消毒

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在将用户输入添加到Javascript的DOM中之前,先对其进行消毒

永远不要 使用

escape()
。与HTML编码无关。它更像是URL编码,但那还不合适。这是一种奇怪的非标准编码,仅在Javascript中可用。

如果您需要HTML编码器,则必须自己编写,因为Javascript不能给您一个。例如:

function enpreHTML(s) {    return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');}

但是,尽管这足以将您放置

user_id
在的位置
inputvalue
,但这还不够,
id
因为ID只能使用有限的字符选择。(而且
%
不在其中,所以
escape()
甚至
enpreURIComponent()
是不好的。)

您可以发明自己的编码方案,以将任何字符放入ID中,例如:

function enpreID(s) {    if (s==='') return '_';    return s.replace(/[^a-zA-Z0-9.-]/g, function(match) {        return '_'+match[0].charCodeAt(0).toString(16)+'_';    });}

但是,如果

user_id
两次出现相同的问题,您仍然会遇到问题。坦白地说,抛出HTML字符串的整个过程通常不是一个好主意。请改用DOM方法,并保留对每个元素的Javascript引用,因此您不必继续调用
getElementById
,也不必担心如何将任意字符串插入ID中。

例如。:

function addChut(user_id) {    var log= document.createElement('div');    log.className= 'log';    var textarea= document.createElement('textarea');    var input= document.createElement('input');    input.value= user_id;    input.readonly= True;    var button= document.createElement('input');    button.type= 'button';    button.value= 'Message';    var chut= document.createElement('div');    chut.className= 'chut';    chut.appendChild(log);    chut.appendChild(textarea);    chut.appendChild(input);    chut.appendChild(button);    document.getElementById('chuts').appendChild(chut);    button.onclick= function() {        alert('Send '+textarea.value+' to '+user_id);    };    return chut;}

您还可以使用便利函数或JS框架来减少其中的create-set-appends调用的冗长时间。

预计到达时间:

我目前正在使用jQuery作为框架

确定,然后考虑jQuery 1.4创建快捷方式,例如:

var log= $('<div>', {className: 'log'});var input= $('<input>', {readOnly: true, val: user_id});...

我现在遇到的问题是我使用JSONP向页面添加元素和事件,因此在显示消息之前我不知道元素是否已经存在。

您可以

user_id
在Javascript中查找元素节点(或包装对象),以将该信息保存在DOM本身中,而DOM中可以包含的字符
id
受到限制。

var chut_lookup= {};...function getChut(user_id) {    var key= '_map_'+user_id;    if (key in chut_lookup)        return chut_lookup[key];    return chut_lookup[key]= addChut(user_id);}

_map_
前缀是因为Javascript对象不能 完全 用作任意字符串的映射。空字符串以及IE中的某些
Object
成员名称将其混淆。)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416112.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号