Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как возвращать 5 ключей из объекта, и делать офсет?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Создать массив, в котором будут ключи объекта. Отсортировать этот массив (не обязательно). Далее всё, как обычно делаете с массивом, можно даже по индексам, только в качестве значений берёте пары из объекта.
    Ответ написан
    4 комментария
  • Вывести текс из JS, но не показать?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let str = 'текст'; 
    document.write("<!-- " + str + " -->");

    Ещё можно так:
    let str = 'текст'; 
    document.write('<span style="display:none">' + str + "</span>");
    Ответ написан
    Комментировать
  • Как сделать if для текста в JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    document.write = function(x) {
       if (x == "текст") document.writeln(x);
       else {
          alert(x); //что-то происходит
       }
    }
    
    document.write("текст");
    document.write("другой текст");
    Ответ написан
    Комментировать
  • Как вывести алерт если в консоли есть ошибка?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если в консоли синтаксическая ошибка, то скрипт даже не начал выполнятся.

    Но у вас, похоже, ошибка времени выполнения, а это значит, что скрипт выполняется до возникновения ошибки. То есть нужно вставить алерт ДО того места, где возникает ошибка. Например, можно в самое начало скрипта - и он выполнится. Если не выполняется, то значит ошибка происходит раньше. А если даже в начале скрипта не выполняется, то см. п.1. - скрипт не работает.

    Вставьте алерт в начало и проверьте, что он работает. Если всё ок, двигайте дальше. Как-то так.
    Ответ написан
    Комментировать
  • Есть ли ивент чтобы слушать аякс запрос?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    let xhr = new XMLHttpRequest();
    xhr.addEventListener("progress", updateProgress);
    xhr.addEventListener("load", transferComplete);
    xhr.addEventListener("error", transferFailed);
    xhr.addEventListener("abort", transferCanceled);

    Либо по-старинке использовать xhr.onreadystatechange
    Ответ написан
  • Почему скорость setInterval не меняется?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Функция из setInterval выполняется не с периодичностью, которая указана вторым параметром, а несколько иначе:
    1) Выполняется функция.
    2) Выполняется прочий код (события).
    3) Работа браузера.
    4) Работа других приложений и ОС.
    5) Тупо ожидание следующего тика (для всех таймеров).
    6) Проверка. Если прошло время, указанное во втором параметре, то обнулить таймер и выполнить п.1
    И вот в этом вся соль. Время выполнения функции может быть больше, чем интервал. Например, функция выполняется 3мс, а интервал у вас 1мс. Тогда не будет особой разницы, интервал 1мс, 0.5мс или 0.00001 мс. Вы можете даже указать 0мс - это не значит, что у вас в момент выполнится бесконечное количество итераций.
    Работа браузера тоже может быть не нулевой, а вполне существенной. Например, анимированный скролл к заданной позиции может занимать приличное время (10мс, к примеру), и пока он происходит, все прочие ивенты и таймеры игнорируются.
    Ответ написан
  • Как строку с числом в конце перевести в число?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Тогда уж так:
    +str.match(/\d+$/)
    Если числа нет, то будет 0.
    И никакой ошибки не будет.
    Ответ написан
    Комментировать
  • Как замедлить цикл прерыванием времени?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    function move() {
        let wait = 0;
        x.forEach((e) => {
            setTimeout(function() {e.style.display = "block";}, wait);
            wait += 1000;
        }
    }
    Ответ написан
    Комментировать
  • Как определить наибольшее число в строке?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    function find (){
    	var numb = document.getElementById('numb').value; //считываю данные с input text
    	var matches = numb.match(/\d+/g);
    	var result = matches === null ? 0 : Math.max(...matches);
    	alert(result);
    	return result;
    }
    Ответ написан
    Комментировать
  • Как декодировать строку в кодировке Windows-1251 в UTF8?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    Ещё один вариант нашёл - подмена кодировки ответа.
    xhr.open("GET", url, true);
    xhr.overrideMimeType('text/plain; charset=windows-1251');
    xhr.send();
    Ответ написан
    1 комментарий
  • Как изменить цвет текста по нажатию на радио кнопку?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Откройте консоль в браузере - там будет ошибка и её описание, скорее всего.

    Будучи телепатом, сразу вижу, что getElementsByClassName возвращает массив.
    var razpricee = document.getElementsByClassName('tdprice')[0];

    А на будущее научитесь отлаживать скрипты.
    Например, банально использовать console.log:
    var yniverrr = document.getElementById('yniverr')
    console.log("yniverrr = ",yniverrr)
    var razpricee = document.getElementsByClassName('tdprice')[0];
    console.log("razpricee = ",razpricee)
    console.log("checked? ",yniverr.checked);
    if(yniverr.checked){razpricee.style.color='#c6c6c6';}

    В таком духе. Шаг за шагом можно найти ошибку. Может быть, у вас скрипт вообще в header и выполняется до создания элементов, тогда у вас к ним нет доступа.
    Ответ написан
    Комментировать
  • По какой причине не работает JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Почему не работает? Работает.
    5bb671ad01b71990299728.png
    Старательно заменяет каждый символ на пару квадратных скобок.
    Правда, после того, как изменен рутовый элемент (html), других элементов не остаётся.
    Ответ написан
    Комментировать
  • Как проверить, что ip находится в заданном диапазоне?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    const ip4ToInt = ip =>
      ip.split('.').reduce((int, oct) => (int << 8) + parseInt(oct, 10), 0) >>> 0;
    
    const isIp4InCidr = ip => cidr => {
      const [range, bits = 32] = cidr.split('/');
      const mask = ~(2 ** (32 - bits) - 1);
      return (ip4ToInt(ip) & mask) === (ip4ToInt(range) & mask);
    };
    
    const isIp4InCidrs = (ip, cidrs) => cidrs.some(isIp4InCidr(ip));
    
    isIp4InCidrs('192.168.1.5', ['10.10.0.0/16', '192.168.1.1/24']); // true
    Ответ написан
    Комментировать
  • Есть ли способ из расширения Chrome осуществить nslookup с помощью JS?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    chrome.webRequest.onCompleted.addListener(function(d) {
    	console.log(d.ip, d.url);
    }, {'urls' : ["<all_urls>"], 'types' : ['main_frame']});
    Ответ написан
    Комментировать
  • Что делает регулярное выражение?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сложно сказать словами, что делает.
    Видимо, ищет символы, не являющиеся пробелами (включая \n) в конце строки и заменяет их на "..."
    Причем, перед ними должен быть один пробел (или символ \n) и любое количество специальных символов.
    Как-то так, хотя это не точное объяснение.
    Вообще довольно странный regex, не для всех текстов подходит, а только для очень специфических. Может, что-то другое считает две строки? Не этот код?

    Вот сайтик для развлечения: https://regex101.com/
    Там можно вбить свою регулярку, посмотреть "на словах", что она делает, а также поэкспериментировать с изменяемым текстом.
    Там даже шпаргалка по регуляркам есть, так что можно уже самому начать понимать, что за магия происходит.

    Для трех строк я бы сделал что-то в этом роде:
    $(this).text(function(index, text) {
       return text.replace(/^.*[\r\n].*[\r\n].*([\r\n][\s\S]*)$/, '...');
    });

    Но это совсем не похоже на то, что в вопросе. Прямолинейный тупой подсчёт строк и замена всего, что длиннее, на многоточие.
    Ответ написан
  • Можно ли задать переменную object через id?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var object = {
      name: $('.class_name').val(), //input.value
      surname: $('.class_surname').val(),
    }
    Ответ написан
  • Как проверить наличие элемента в многомерном массиве?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Рекурсия нужна. Тогда будет поиск на любом уровне вложенности.
    inArr=function(val,arr){if(arr===null)return;for(let i=0;i<arr.length;i++){if(arr[i]==val)return true;if('object'==typeof arr[i])if(inArr(val,arr[i]))return true}return false}; console.log(inArr("22693", orderlist))
    Ответ написан
    Комментировать
  • Как обойти ограничение localStorage для расширения?

    dollar
    @dollar Автор вопроса
    Делай добро и бросай его в воду.
    Правильный ответ был - indexedDB.
    Хотя это и мощный инструмент, но с простой задачей хранения строки тоже справляется.
    Для теста сохранил 30 мегабайт - скушал.
    Даже unlimitedStorage не нужен, всё и так работает.
    Ответ написан
    Комментировать
  • Почему не работает JS-код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что num - это копия значения элемента.
    Лучше сделать так, чтобы num была указателем на сам элемент:
    var num = document.getElementById("number"); //здесь value опускаем
    var btn = document.getElementById("btn");
     
    btn.addEventListener("click", function() {
      alert(num.value*num.value); //получаем текущее значение
    });
    Ответ написан
    1 комментарий
  • Вопрос по циклу JS и массиву - почему так?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что arr[j] сравнивается с arr[j+1]. Это два элемента подряд. Значит, j должен проходить не от 0 до максимума, а от 0 до максимума минус 1.

    Если сделать условие j < i, то будет лишняя операция, которая не нужна, хоть и не мешает. Просто у нас от i до arr.length уже отсортированный массив. Поэтому a[j+1] будет равно a[i], но a[i] уже точно на своём месте и его никуда двигать не нужно. Поэтому это просто лишняя операция, для которой arr[j] > arr[j+1] будет заведомо ложно.
    Ответ написан
    Комментировать