Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Привязка данных к объекту (https://javascript.ru/forum/misc/29183-privyazka-dannykh-k-obektu.html)

Vit 18.06.2012 21:57

Привязка данных к объекту
 
Всем доброго. Есть задача - привязать некий набор данных, представляемый собой текст с кирилицей и латиницей к ячейкам таблицы.

Смысл в том, чтоб при кликах по ячейкам таблицы в некий DIV выводился привязанный к кликнутым ячеям текст.
На сервере делаю так:
Код:

'<td note="'+Переменка содержащая привязываемый текст+'">'+IntToStr(d)+'</td>';
(Сервер мной написаный)
Но браузер (FireFox) отображает это неверно, ибо в самом тексте могут присутствовать любые символы в том числе " скажем.

Первая мысль - кодировать текст, в то, что браузер не станет самостоятельно отображать. Например просто приводить текст в его HEX представление, а в JS наоборот раскодировать:
for(i=0;i<s.length;i+=2){
		 r+=String.fromCharCode(parseInt('0x'+s[i]+s[i+1]));
		};

Где s - строка с HEX значениями. Это работает, но выдает на страницу кракозяблики. (сама страница задана как content="text/html; charset=windows-1251"). Видимо раскодировка в UTF производится.

Отсюда первый вопрос: А как-то можно указать в какую кодировку переводить? Т.е. получить нормальную кириллицу?

Пока отложив это пробую следующий вариант:
Код:

'<td note="'+ URLEncode(Days[d].DayContent)+'">'+IntToStr(d)+'</td>'
А в скрипте клика соответственно:
s=me.getAttribute('note');
		...innerHTML=decodeURIComponent(s);

Где me - указывает на кликнутую ячейку.
Однако получаю ошибку
malformed URI sequence
И если честно пока нечетко понимаю что она означает.

Отсюда второй вопрос: Если делать так, то что это за ошибка, и как ее устранить?

И на последок Вопрос номер три: А как вообще стоит делать такие вещи? Страница должна стать автономной - все что нужно, должно быть заранее подгруженно в нее, а уже выборка соответственно содержимого, которое нужно вытянуть в данный момент времени по некому событию, должна управляться на стороне клиента. Т.е. абсолютно без лишнего запроса к серверу. Сервер дожен отработать один единственный раз, дальше вся работа должна лечь на клиента.

oneguy 19.06.2012 00:04

Я пока не понял полностью 3 вопроса, но мне кажется, что использовать нестандартный атрибут для хранения данных, связанных элементами - не очень хорошая идея. Лучше пойти одним из следующих путей:
1) добавить свойство в каждый объект DOM, представляющий ячейку таблицы;
2) сделать обработчик клика замыканием, которое будет привязано к необходимой переменной;
3) вписать необходимое значение в сам обработчик клика на сервере.

oneguy 19.06.2012 00:13

Если вписывать произвольную строку в значение атрибута, то нужно экранировать чувствительные символы:
Код:

<      заменить на          &lt;
>                          &gt;
"                          &quot;
&                          &amp;
<HT>                            & #9;        (без пробела)
<LF>                        & #10;      (без пробела)
<CR>                        & #13;      (без пробела)


dmitriymar 19.06.2012 00:15

data свойства(атрибуты) вам в помощь

Deff 19.06.2012 00:20

Цитата:

Сообщение от oneguy
Я пока не понял полностью 3 вопроса, но мне кажется, что использовать нестандартный атрибут для хранения данных, связанных

Есть Опыт достаточно длительный опыт использования alt (не в картинках) и rel

devote 19.06.2012 00:26

Цитата:

Сообщение от Deff
Есть Опыт достаточно длительный опыт использования alt (не в картинках) и rel

все же не понимаю чем вам не угодил атрибут data-* ??? официальный атрибут, и валидность проходит.

Deff 19.06.2012 00:32

devote,
:cray: Мну не помнит - но нарылсо(возможно не на data) в ИЕ - после этого юзал выше указанные

Vit 19.06.2012 12:42

Спасибо за инфу, приму к сведению, пока оставлю способ oneguy.


Часовой пояс GMT +3, время: 22:24.