Есть ли способ сделать эту работу?
У меня есть 4 флажка в диалоговом окне jquery, и каждый флажок содержит код base64url.
Закрыв диалоговое окно, я бы хотел получить новый код base64url.
Это то, что я хочу сделать.
поиск отмеченного флажка
(например, выберите Layer1, Layer2 и Layer3)
конвертировать каждое значение из base64url в десятичное
(Layer1: 'gAAAAOAAAA' до '320000140000',
Layer2: '___BAIEI' до '636363636310848',
Layer3: 'gAAAAAAADA' до '320000000030')
реализовать операцию "ИЛИ" (логическая дизъюнкция)
(1-й десятичный номер каждого уровня равен 32,63,32, поэтому после операции OR это 63.)
Я сделал первый шаг следующим образом.
selected = [
'gAAAAOAAAA',//Layer1
'_____BAIEI',//Layer2
'gAAAAAAADA',//Layer3
'H-AAAgAEAA',//Layer4
];
$("#dialog").dialog({
autoOpen: false,
modal: true,
minWidth: 450,
buttons:{
"OK": function(){
// search for checked checkboxes
var checkList = [];
$('[class="layer"]:checked').map(function(){
var layerID = parseInt($(this).attr('id'));
var txt2 = selected[layerID];
checkList.push(txt2);
});
Может ли кто-нибудь помочь мне со следующими шагами?
Спасибо за ваше время.
Я реализовал большую часть того, что вам нужно здесь.
var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
function base64decode(str) {
var bytes = [];
for (var i = 0; i < str.length; i++) {
bytes.push(alphabet.indexOf(str.charAt(i)));
}
return bytes;
}
function base64encode(bytes) {
var str = '';
for (var i = 0; i < bytes.length; i++) {
str += alphabet.charAt(bytes[i]);
}
return str;
}
$('input').click(
function () {
var values = [];
var result = [];
$('input:checked').each(
function (_, el) { values.push(base64decode($(el).data('val'))); }
);
var result = [];
if (values.length > 0) {
for (var i = 0; i < values[0].length; i++) {
result.push(
values.reduce(
function (a, b) {
return a | b[i];
},
0
)
);
}
}
$('#result').text(base64encode(result));
}
);
В стороне, я храню кодированные Base64 данные внутри атрибута данных в каждом флажке, а не в отдельном массиве.