2014-02-04 3 views
1

Я заполняю контейнер с разными символами, используя шрифт значка. Я хочу знать, если есть лучший способ перебора шестнадцатеричных значений, чем создать пользовательский массив и сделать это следующим образом:Более подходящий способ перебрать шестнадцатеричные значения

var hexPlaceValue1=0, hexPlaceValue2=0; 
var hexArray = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']; 

for(var i=0;i through something;i++){ 
    if(hexPlaceValue1 == 15) { 
     var $glyph = $('<div class="glyph" data-glyph-index="' + i + '">&#xe' + String('00' + hexArray[hexPlaceValue2] + hexArray[hexPlaceValue1]).slice(-3) + ';</div>'); 
     hexPlaceValue1 = 0; 
     hexPlaceValue2++; 
    } else { 
     var $glyph = $('<div class="glyph" data-glyph-index="' + i + '">&#xe' + String('00' + hexArray[hexPlaceValue2] + hexArray[hexPlaceValue1]).slice(-3) + ';</div>'); 
     hexPlaceValue1++; 
    } 
} 

Очевидно, что это может привести к проблемам, если введены более иконки (предоставляются, его должно быть много.) Я просто хочу знать, есть ли более эффективный способ сделать это.

ответ

0

Исходя из логики в вашем for цикле, это выглядит, по существу, как вы хотите сделать:

for(var i=0;i through something;i++) { 
    var hex = '&#x' + (0xe000|i).toString(16); 
    var $glyph = $('<div class="glyph" data-glyph-index="'+i+'">'+hex+';</div>'); 
} 

Пока i<4096 (0x1000), то наиболее значимым шестнадцатеричная цифра остается e.

+0

Можете ли вы объяснить этот синтаксис: '(0ex000 | я)' – smilebomb

+1

@jefffabiny Все, что предшествует '0x', обозначает [шестнадцатеричное число] (http://en.wikipedia.org/wiki/Hexadecimal). '|' является оператором [побитовое ИЛИ] (http://en.wikipedia.org/wiki/Bitwise_operation#OR). В основном '(0xe000 | i) .toString (16)' примет 'i', преобразует его в шестнадцатеричный, 0-pad его до 3 символов и добавляет' e'. То же, что и ваш цикл. Надеюсь, это поможет. – Matt

0

Вы можете перебрать ASCii коду, как это вместо того, чтобы жёстко прописанный массив:

// Instead of this 
// var hexArray = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']; 

// You can use this: 
for (var i=48; i<71; i++){ 
    console.log(i, String.fromCharCode(i)); 
    // Skip 58 to 64 char codes as they are non alphanumeric 
    if (i == 57) i =64; 
} 

Вы можете найти полукокс кодовых таблиц в Интернете, вот один link

+0

Он использует символ '& # x0000;', потому что он использует шрифт, шрифт может иметь рисунок < 32 (не для печати) или у другого символа, запрещенного в HTML (он не ограничен AFAWK по алфавитно-цифровым символам). Для этого он просто не может просто использовать 'String.fromCharCode'. –

+0

Я знаю, что я только что добавил образец, как заменить исходный массив жесткого кодирования. –

1

Javascript, как и большинство (все?) программирования языков, знает, как обращаться с шестнадцатеричным.

for (i=0x0; i < 0x30; i++) { print("0x0" + i.toString(16) +" = " + i) } 

Выход:

0x00 = 0 
0x01 = 1 
0x02 = 2 
0x03 = 3 
0x04 = 4 
0x05 = 5 
0x06 = 6 
0x07 = 7 
0x08 = 8 
0x09 = 9 
0x0a = 10 
0x0b = 11 
0x0c = 12 
0x0d = 13 
0x0e = 14 
0x0f = 15 
0x010 = 16 
[...] 
0x026 = 38 
0x027 = 39 
0x028 = 40 
0x029 = 41 
0x02a = 42 
0x02b = 43 
0x02c = 44 
0x02d = 45 
0x02e = 46 
0x02f = 47 

И тогда можно играть с прокладкой, см google или вопрос: Pad a number with leading zeros in JavaScript

Смежные вопросы