Простая функция хеширования, удобная для HTML и чувствительная к регистру - PullRequest
1 голос
/ 25 января 2012

Я получаю некоторые строки из внешнего источника и отображаю их в span s на своей странице.

Мне нужен способ вернуться к этим строкам, используя document.getElementById() или jQuery's $("#XXXX"), поэтому наряду с каждой строкой я получаю какой-то идентификатор, я использую этот идентификатор в качестве идентификатора span.

Проблема в том, что полученный идентификатор может содержать символы типа +, например.Что не допускается в качестве значения для атрибута id http://www.w3schools.com/tags/att_standard_id.asp Кроме того, эти идентификаторы чувствительны к регистру.Поэтому я подумал об использовании функции хеширования, такой как SHA или MD5, чтобы хэшировать полученные мной идентификаторы, а затем использовать их в качестве идентификаторов для моих промежутков, и я снова могу применить функцию хеширования, чтобы найти свой элемент.сложный для такой простой функциональности.Есть лучший способ сделать это?или, может быть, очень простая функция хеширования, которая гарантирует id дружественные символы и чувствительность к регистру?(HTML id не чувствителен к регистру, это еще одна причина для рассмотрения хэширующих функций)

Ответы [ 3 ]

1 голос
/ 25 января 2012

Вы можете просто увеличивать идентификаторы с помощью числа и некоторой строки для начала идентификатора.

Идентификатором диапазона будет "a1", "a2" и т. Д.

1 голос
/ 25 января 2012

Я предполагаю, что проблема в том, что вы думаете позже, что вы получите те же строки и захотите преобразовать их таким же образом, а затем использовать их, чтобы найти оригинальные соответствующие элементы?

Если это так, вам просто нужно тщательно продезинфицировать струны.Ряд регулярных выражений может помочь вам отобразить недопустимые символы на действительные и сделать прописные буквы уникальными.Например, вы можете преобразовать "A" в "-a-" и "+" в "-plus-".

Тщательно выбранная схема должна гарантировать, что шансы на столкновение (то есть, кто-то дает вам строку, которая выглядит как экранированная версия другой строки) должны быть очень малы и в любом случае обнаруживаться немедленно.*

1 голос
/ 25 января 2012

Можете ли вы отказаться от полученного идентификатора и просто реализовать что-то простое, как это:

var counter = 0;
function uniqueId(){
    return "Id" + ++counter;
}
...