У нас есть внешний файл .js, который мы хотим включить в несколько разных страниц. Файл содержит код для сортировки таблицы на стороне клиента и использует символы ▲ и ▼ в скрипте, чтобы указать, какой столбец отсортирован и в каком направлении.
Первоначально сценарий был написан для страницы ASP.Net для разгрузки некоторой работы по сортировке с сервера на клиент (предотвращение сортировки обратных ссылок, когда включен JavaScript). В этом случае кодировка почти всегда UTF-8, и она прекрасно работает в этом контексте.
Однако у нас также есть несколько старых классических ASP-страниц, в которые мы хотим включить скрипт. Для этих страниц кодировка является скорее сборной соломой, в зависимости от того, кто и когда написал страницу, и каким инструментом они пользовались (блокнот, vs6, vs2005, другой помощник по HTML). Часто на странице не указывается кодировка, поэтому выбор зависит от браузера, но на самом деле нет строгого правила, которое я вижу.
Проблема в том, что при использовании другой кодировки (не UTF8) символы ▼ и ▲ не будут отображаться правильно. Вместо этого я попытался использовать html-объекты, но не смог заставить их работать хорошо из javascript.
Как я могу настроить скрипт для различных возможных кодировок так, чтобы «специальные» символы всегда отображались правильно? Могу ли я использовать разные символы или трюк, который я пропустил, чтобы заставить объекты html работать из javascript?
Вот фрагмент кода, в котором используются символы:
// get sort direction, arrow
var dir = 1;
if (self.innerHTML.indexOf(" ▲") > -1)
dir = -1;
var arrow = (dir == 1)?" ▲":" ▼";
// SORT -- function that actually sorts- not relevant to the question
if (!SimpleTableSort(t.id, self.cellIndex, dir, sortType)) return;
//remove all arrows
for (var c = 0,cl=t.rows[0].cells.length;c<cl;c+=1)
{
var cell = t.rows[0].cells[c];
cell.innerHTML = cell.innerHTML.replace(" ▲", "").replace(" ▼", "");
}
// set new arrow
self.innerHTML += arrow;
Для любопытных использовались следующие кодовые точки с принятым ответом: \ u25B4 и \ u25BC.