Никогдаescape()
. HTML-кодирование не имеет никакого отношения. Это больше похоже на кодирование URL, но это даже не так. Это странная нестандартная кодировка, доступная только в JavaScript.
Если вы хотите кодировщик HTML, вам придется писать его самостоятельно, так как JavaScript не дает вам одного. Например:
function encodeHTML(s) {
return s.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}
Однако пока этого достаточно, чтобы поставить user_id
в таких местах, как input value
, это не достаточно для id
, поскольку идентификаторы можно использовать только ограниченный набор символов. (И %
среди них нет, так escape()
или даже encodeURIComponent()
не хорошо.)
Вы можете придумать свою собственную схему кодирования, чтобы поместить символы в ID, например:
function encodeID(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
или беспокоиться о том, как вставляются произвольные строки в идентификаторы.
например.:
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, чтобы сократить длинноты из создания набора-присоединяет звонки там.
ETA:
Я использую JQuery в данный момент в качестве основы
OK, а затем рассмотреть ярлыки создания JQuery 1.4, например .:
var log= $('<div>', {className: 'log'});
var input= $('<input>', {readOnly: true, val: user_id});
...
Проблема, которую я имею прямо сейчас, это то, что я использую JSONP для добавления элементов и событий на страницу, поэтому я не могу знать, уже ли элементы существует или нет, прежде чем показывать сообщение.
Вы можете сохранить поиск по user_id
к узлам элементов (или объектов оберток) в JavaScript, чтобы сохранить положить эту информацию в самом 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
имен членов, запутать его.)
Что именно является функцией 'id'? – Tgr
id прямо сейчас представляет собой любую строку, представляющую пользователя.Я использую его, чтобы различать похожие структуры страницы, принадлежащие разным пользователям. по этой логике, MD5 или base64 может быть хорошим ожиданием, чтобы сделать это, я думаю. Для этого просто нет встроенного материала. –