• Как скачать генерируемый на сервере файл?

    lazalu68
    @lazalu68
    Salmon
    Думаю, достаточно указать Content-type: application/octet-stream

    Не смогу объяснить никакой теории по этому поводу, но когда-то, когда я писал сервер на node.js, тоже была такая проблема. Решилась указанием MIME-типа "application/octet-stream"

    Кстати, у вас дважды указан тип.
    Ответ написан
    Комментировать
  • Как выполнить поиск в таблице?

    lazalu68
    @lazalu68
    Salmon
    По задаче: если у вас есть и номер первой ячейки, и номер второй ячейки, то в чем проблема взять нужный элемент?

    var l = $("#length td:contains('2100')").index(),
        w = $("#width:contains('1800')").index(),
        el = $("tr").eq(l).find("td").eq(w);
    
    console.log(el.text());


    А что значит несколько одинаковых значений ширины? Как такое возможно?
    Ответ написан
  • Как можно подключить сервис для перевода текста?

    lazalu68
    @lazalu68
    Salmon
    Ответ написан
    Комментировать
  • Как сделать правильную сортировку массива?

    lazalu68
    @lazalu68
    Salmon
    map.sort(function(a, b) {
        return a.value - b.value;
    });
    Ответ написан
    Комментировать
  • JQuery: Как удалить элемент и оставить при этом его содержимое?

    lazalu68
    @lazalu68
    Salmon
    На jQuery это делается методом unwrap
    Ответ написан
    Комментировать
  • Почему я получаю в консоль undefined?

    lazalu68
    @lazalu68
    Salmon
    Ну можно например bind сделать, как-то так
    Ответ написан
    Комментировать
  • Как сделать, чтобы несколько пользователей с одной клавиатуры могли одновременно управлять?

    lazalu68
    @lazalu68
    Salmon
    Можно использовать setInterval, как-то так. Есть небольшие тупняки, например если player1 нажал кнопку "влево", то setInterval для него не обновится по нажатию на кнопку "вправо", но решение не займет больше пяти минут
    Ответ написан
    1 комментарий
  • Как из формы вытянуть таблицу и поместить ее в другом месте?

    lazalu68
    @lazalu68
    Salmon
    Если я все правильно понял, то с jQuery можно сделать так:

    $('.variations_form.cart').before( $('.description-table, .price').clone() )


    Без jQuery как-то так:

    var form = document.getElementsByClassName('variations_form')[0],
        form_container = form.parentElement,
        table_copy = form.getElementsByClassName('description-table')[0].cloneNode(true),
        span_copy = form.getElementsByClassName('price')[0].cloneNode(true);
    
    form_container.insertBefore(table_copy, form);
    form_container.insertBefore(span_copy, form);
    Ответ написан
    Комментировать
  • Как исключить объект в JS?

    lazalu68
    @lazalu68
    Salmon
    green176: Если по свайпу у вас происходит какое-то действие, которое вы не хотите выполнять если свайп был на определенного типа элементах, как вариант по свайпу можете проверять event.target. То есть свайп так же вешаете на document.body, а потом просто смотрите, на каком элементе был свайп. Например так, попробуйте сделать свайп на блоках разного цвета. Цвет блока отобразится слева сверху. Смотрите, как это реализовано. Если говорить о вашем примере ("как мне отсюда (document.body) исключить div с классом например mydiv?"), можете делать так:

    var body_hammer = new Hammer(document.body)
    
    body_hammer.on("swipe", function(event) {
        if ( !$( event.target ).is('.mydiv') ) {
            // some actions
        }
    });


    А если все же хотите запариться и вешать Hammer более чем на один элемент, вот смотрите как народ делает.
    Ответ написан
    Комментировать
  • В чем моя ошибка при отображении json?

    lazalu68
    @lazalu68
    Salmon
    Надо вывести в консоль все id? Если да, то так, наверное:

    $( document ).ready(function() {
    	$.ajax({
    		url: 'http://mylink.com',
    		type: 'GET',
    		dataType: 'json',
    		crossDomain: true,
    		success: function(data){
    			for (var i = 0, l = data.length; i < l; i++) {
    				console.log(data[i].id);
    			}
    		},
    		beforeSend: function (xhr) {
    			xhr.setRequestHeader ("Authorization", "Token " + "mytoken");
    		},
    	});
    });
    Ответ написан
  • Как реализовать сортировку объектов?

    lazalu68
    @lazalu68
    Salmon
    А как вы собираетесь по этим ключам восстанавливать предыдущую сортировку? Вам тогда придется создавать прямо в элементах свойства типа "array_of_previous_next" и т.д., все равно где-то придется хранить информацию о сортировке. Поэтому логичней все-таки отделить сортировку от логики объекта, максимум - задавать объектам либо уникальное имя, либо ID, как-то так:

    var array_of_orders = [],
        current_order = 0,
        objects = [
            { name: 'q_1' },
            { name: 'w_2' },
            { name: 'e_3' },
            { name: 'r_4' },
            { name: 't_5' },
            { name: 'y_6' },
            { name: 'u_7' }
        ];
    
    array_of_orders.push( objects.map(function(object) { return object.name; }) );
    
    function sort(sort_function) {
        objects.sort(sort_function || function() { return Math.random() - 0.5; });
        array_of_orders.push( objects.map(function(object) { return object.name; }) );
        current_order = array_of_orders.length - 1;    
    }
    
    function applyOrder(index) {
        var order = array_of_orders[index], 
            result, name_to_find, i, k, l;
    
        if ( order ) {
            l = order.length;
            result = Array( l );
    
            for (i = 0; i < l; i++) {
                name_to_find = order[i];
    
                for (k = 0; k < l; k++) {
                    if (objects[k].name === name_to_find) {
                        result[i] = objects[k];
                    }
                }
            }
    
            objects = result;
            current_order = index;
        }
    };


    Все просто: из важных для сортировки свойств object имеет только свойство name, порядок сортировки (массив со значениями свойств name соответствующего объекта) складывается в массив array_of_orders, номер текущего порядка сортировки лежит в переменной current_order. Чтобы отсортировать массив, вызываете функцию sort() с аргументов в виде функции сортировки, ну или без функции, тогда сортировка будет произвольная. Чтобы вернуть предыдущую сортировку, делаете вызов функции applyOrder( current_order - 1 ).
    Ответ написан
    Комментировать
  • Как определить все места в слове, в которых можно осуществить перенос части этого слова на другую строку, по правилам русского языка?

    lazalu68
    @lazalu68
    Salmon
    Это конечно не .NET, но вот вам пример реализации на JS:

    var vowels = 'оеаиуяыюэё',
        voiced = 'нрвлмдгбзчхжшцщ',
        deaf = 'тскпф',
        brief = 'й',
        other = 'ьъ',
        consonants = 'нтсрвлкмдпгбзчхжшцщф';
    
    function isNotLastSep(remainStr) {
      var is = false;
    
      for (var i = 0; i < remainStr.length; i++) {
        if (vowels.indexOf(remainStr.substr (i, 1)) != -1) { 
          is = true; 
          break; 
        }
      } 
    
      return is;
    } 
    
    function separate(s) {
      var letter = '',
          syllable = '',
          syllables = [],
          final_syllables = [];
    
      function pushSyllable() {
        syllables.push(syllable);
        syllable = '';
      };
    
    
      for (var i = 0; i < s.length; i++) {
        letter = s.substr (i, 1);
        syllable += letter;
    
        // Проверка на признаки конца слогов
        // если буква равна 'й' и она не первая и не последняя и это не последний слог
        if (
          (i != 0) && 
          (i != s.length -1) && 
          (brief.indexOf (letter) != -1) &&
          (isNotLastSep (s.substr (i+1, s.length-i+1)))
        ) { pushSyllable (); continue; }
    
        // если текущая гласная и следующая тоже гласная
        // EDIT: этот блок необходим если задача - корректно разбить слово на фонетические слоги,
        // и не нужен если задача - разбить слово на части, которые можно переносить
        //
        //  if (
        //  (i < s.length - 1) && 
        //  (vowels.indexOf (letter) != -1) && 
        //  (vowels.indexOf (s.substr (i+1, 1)) != -1)
        //) { pushSyllable (); continue; }
    
        // если текущая гласная, следующая согласная, а после неё гласная
        if (
          (i < s.length - 2) && 
          (vowels.indexOf (letter) != -1) && 
          (consonants.indexOf (s.substr (i+1, 1)) != -1) && 
          (vowels.indexOf (s.substr (i+2, 1)) != -1)
        ) { pushSyllable (); continue; }
    
        // если текущая гласная, следующая глухая согласная, а после согласная и это не последний слог
        if (
          (i < s.length - 2) && 
          (vowels.indexOf (letter) != -1) && 
          (deaf.indexOf (s.substr (i+1, 1)) != -1) && 
          (consonants.indexOf (s.substr (i+2, 1)) != -1) &&
          (isNotLastSep (s.substr (i+1, s.length-i+1)))
        ) { pushSyllable (); continue; }
    
        // если текущая звонкая или шипящая согласная, перед ней гласная, следующая не гласная и не другая, и это не последний слог
        if (
          (i > 0) && 
          (i < s.length - 1) && 
          (voiced.indexOf (letter) != -1) && 
          (vowels.indexOf (s.substr (i-1, 1)) != -1) && 
          (vowels.indexOf (s.substr (i+1, 1)) == -1) && 
          (other.indexOf (s.substr (i+1, 1)) == -1) && 
          (isNotLastSep (s.substr (i+1, s.length-i+1)))
        ) { pushSyllable (); continue; }  
    
        // если текущая другая, а следующая не гласная если это первый слог
        if (
          (i < s.length - 1) && 
          (other.indexOf (letter) != -1) &&
          ((vowels.indexOf (s.substr (i+1, 1)) == -1) || 
          (isNotLastSep (s.substr (0, i))))
        ) { pushSyllable (); continue; } 
      }
      pushSyllable();
    
      return syllables;
    }


    То есть чтобы получить слово с &shy; в нужных местах, делаем так:

    separate('интернационализация').join('&shy;'); 
    // ["ин", "тер", "на", "цио", "на", "ли", "за", "ция"] => "ин&shy;тер&shy;на&shy;цио&shy;на&shy;ли&shy;за&shy;ция"


    Взято отсюда, чуть косметически модицифировано.

    Кажется, это как раз и есть реализация алгоритма Хpистова:

    «Х-»
    «Г-Г»
    «ГС-СГ»
    «СГ-СГ»
    «ГС-ССГ»
    «ГСС-ССГ»

    Где: Г — гласная, С — согласная, Х — буква из набора «ьъй».
    Ответ написан
    5 комментариев
  • SQL, кто либо может помочь?

    lazalu68
    @lazalu68
    Salmon
    Комментировать
  • Как вычислить координаты многоугольного объекта и как с ними работать?

    lazalu68
    @lazalu68
    Salmon
    Я в принципе понял, чего вы хотите, но чтобы определиться с тем, как именно нужно решать эту проблему, сначала надо определиться с тем, что вы хотите на выходе получить. Вы уже выбрали формат и способ обработки координат? Как будет происходить обработка округлых фигур? Собираетесь обрабатывать только внешнюю часть фигур или внутренняя тоже нужна будет?
    Ответ написан
    4 комментария
  • Ка сверстать такие колонки?

    lazalu68
    @lazalu68
    Salmon
    Ну например с флоатами, как-то так.
    Ответ написан
    Комментировать
  • Как выучить js творческому человеку?

    lazalu68
    @lazalu68
    Salmon
    "Как выучить js творческому человеку?"

    Представления не имею)

    "Код выполняется построчно и не перескакивает с строки на строку?"

    Код выполняется в порядке появления инструкций. Упрощенно: движок разбирает исходный код, проверяет его на соответствие синтаксису, и если все Ок, то выполняет инструкции в том порядке, в каком они были описаны. Например:
    var a = 5;
    
    var test = function() {
    	var b = 192847;
    
    	var sum = a + b;
    
    	alert('a + b = ' + sum);
    };
    
    test();

    Первая инструкция это "var a = 5;", она сложная, т.к. состоит из двух инструкций: одна это объявление переменной a, другая - присвоение переменной a значения 5. Если разделить эту сложную инструкцию на две элементарные, то получится так:
    var a;
    
    a = 5;

    Далее. Вторая инструкция в моем коде это "var test = function() { var b = 192847; var sum = a + b; alert('a + b = ' + sum); };". Она тоже сложная, порядок выполнения такой:

    1. Объявление переменной test,
    2. Присвоение переменной test значения "function() { var b = 192847; var sum = a + b; alert('a + b = ' + sum); };", (на самом деле в переменной test будет лежать ссылка на эту функцию, но мне кажется, что это пока можно пропустить)

    Все инструкции внутри этой функции будут выполняться только тогда, когда эта функция будет вызвана посредством обращения к переменной, в которой она сохранена, с явным указанием передаваемых аргументов (даже если ни одного аргумента не будет передано). Следующая инструкция в моем коде как раз это и будет делать - вызывать функцию test:
    test();
    test - это название переменной, в которой лежит функция, а в скобках указаны аргументы, которые мы передаем функции, то есть никаких. Функция test содержит такие инструкции:
    var b = 192847;
    
    var sum = a + b;
    
    alert('a + b = ' + sum);

    Выполняться эти инструкции будет так, опишу в элементарных инструкциях:

    1. var b; - объявление переменной b,
    2. b = 192847; - присвоение переменной b значения 192847,
    3. var sum; - объявление переменной sum,
    4. sum = a + b; - присвоение переменной sum значения, равного сумме значений, которые сохранены в переменных a и b, то есть 5 + 192847 = 192852,
    5. alert('a + b = ' + sum); - вызов функции alert и передача этой функции единственного аргумента 'a + b = ' + sum, который равен сумме строки 'a + b = ' и числа сохраненного в переменной sum. В JS можно прибавить строку к числу, потому что в этом случае число будет принудительно приведено к строке, таким образом произойдет объединение строк 'a + b = ' и '192852'. То есть эта инструкция вызывает функцию alert и передает ей аргумент 'a + b = 192852'. Функция alert выводит переданные ей аргументы в диалоговом окне в браузере, то есть вызов alert('a + b = ' + sum); покажет пользователю диалоговое окошке с текстом 'a + b = 192852'.

    Посмотрите еще раз на пример. Соберем вместе все элементарные инструкции, выполняемые им:
    var a;
    
    a = 5;
    
    var test;
    
    test = function() {	var b = 192847; var sum = a + b; alert('a + b = ' + sum); };
    
    // выполнение следующих инструкций инициировано вызовом функции test()
    
    var b;
    
    b = 192847;
    
    var sum;
    
    sum = a + b;
    
    alert('a + b = ' + sum);

    Вызов функции alert на самом деле не является элементарной инструкцией, потому что сама по себе эта функция состоит еще из многих других, но посмотреть что в ней внутри, я не смогу) Поэтому схема останется такой. К тому же, схема от этого не теряет наглядности.

    Всей этой белибердой я хотел показать, что элементарной единицей кода является инструкция. Отвечая на ваш вопрос "Код выполняется построчно и не перескакивает с строки на строку?": код, так сказать, перескакивает с строки на строку до тех пор, пока не будет найден конец текущей инструкции, после чего эта инструкция будет выполнена, а затем будет выполнена следующая инструкция.

    "Если что то будет не по синтаксису то будет ошибка?"

    Верно, любое несоответствие синтаксису вызовет ошибку. Возьмем наш же пример:
    var a = 5;
    var test = function() {
    	var b = 192847;
    	var sum = a + b;
    	alert('a + b = ' + sum);
    test();

    В этом примере я намеренно пропустил символ "}", который показал бы движку (который выполняет код JS), что инструкция объявления функции (начавшаяся на второй строке) закончена.
    При выполнении этого кода появляется такая ошибка:

    "SyntaxError: missing } after function body"

    Поскольку проверка синтаксиса происходит до выполнения кода, даже синтаксически правильно описанная инструкция var a = 5; не была выполнена, несмотря на то, что шла перед ошибочной инструкцией.

    "Как можно манипулировать классом lowPosition которого нет?"

    Ну, это можно делать так же, как можно на листочке бумаги рисовать несуществующих животных) Я так понял, речь об этой части кода: _block.toggleClass('lowPosition');
    Метод .toggleClass('someClass') делает вот что: проверяет, имеет ли элемент класс 'someClass', и если элемент имеет класс 'someClass', то убирает этот класс, а если не имеет, то добавляет к элементу этот класс. Список классов, которые имеет элемент, описаны просто строкой: элемент <div class="container fluid"></div> имеет классы "container" и "fluid", а элемент <a href="example.com">example</a> так же как элемент <p class="">some paragraph</p> не имеет классов. Поэтому чтобы "манипулировать классом lowPosition которого нет", достаточно добавить строку "lowPosition" к строке с классами элемента. Например, если мы хотим добавить к элементу <div class="container fluid"></div>, класс "lowPosition", то в результате у нас получится такой элемент: <div class="container fluid lowPosition"></div>

    ".hasClass функция которая проверяет наличие класса, допустим. Мне обязательно это делать?"

    Ну код это же не черная магия какая-нибудь, код выполняет определенную цель, и для того чтоб ее достигнуть, нужно совершить определенные действия. Вот ваш код например:
    $(document).ready(function () {
    
        $('.menu-trigger').click(function () {
            $('nav ul').slideToggle(500);
        }); 
    
        $(window).resize(function () {
            if ($(window).width() > 600) {
                $('nav ul').removeAttr('style');
            }
        }); 
    
    	var _menu = $("#menu");
    	var _block = $("#block");
    
    	_menu.click(function () {
    	    _block.toggleClass('lowPosition');
    	    var nextpos = _block.hasClass('lowPosition') ? '10%' : '4%';
    	    _block.animate({
    	        'bottom': nextpos
    	    }, 300);
    	});
    
    });

    Это одна длинная инструкция. Тут происходит вот что: метод .ready() принимает аргументом функцию, которую он выполнит сразу же по рендеру (отрисовке) документа. Давайте сразу будем обсуждать ту часть этой функции, которая начинается с инструкции "var _menu = $("#menu");". В ней происходит вот что:

    1. var _menu = $("#menu"); - объявляется переменная _menu, которой присваивается ссылка на элемент #menu,
    2. var _block = $("#block"); - объявляется переменная _block, которой присваивается ссылка на элемент #menu,
    3. _menu.click( function() {} ); (инструкции внутри функции опущены) - вызывается метод .click(), который принимает аргументом функцию function() {}. Метод .click( function() {} ) "связывает" некоторые события, происходящие в браузере, с функциями, которые должны быть выполнены, когда эти события произойдут, а именно: функция function() {} будет выполнена, когда для элемента _menu произойдет событие, то есть когда пользователь кликнет на него.

    А теперь по инструкциям внутри этой функции. Когда пользователь кликает на элемент _menu происходит следующее:

    1. _block.toggleClass('lowPosition'); - если элемент _block имеет класс 'lowPosition', то этот класс с него убирается, а если не имеет - добавляется,
    2. var nextpos = _block.hasClass('lowPosition') ? '10%' : '4%'; - объявляется переменная nextpos, которой присваивается значение '10%' если элемент _block имеет класс 'lowPosition', или значение '4%' если элемент _block не имеет класс 'lowPosition',
    3. _block.animate({ 'bottom': nextpos }, 300); - метод .animate() принимает аргументом объект с необходимыми для анимации свойствами и длительность анимации в миллисекундах, (в результате свойство 'bottom' элемента _block за 300 миллисекунд примет достаточное количество промежуточных значений, чтобы пользователю этот переход показался плавным. Например, если изначально свойство 'bottom' имело значение '4%', и мы в первом аргументе метода .animate() задали конечное значение '10%', и если предположить что за 300 миллисекунд метод .animate() анимирует 6 кадров, то свойство 'bottom' будет принимать такие значения, начиная с исходного и заканчивая тем, которое задано в первом аргументе для метода .animate(): 4%, 5%, 6%, 7%, 8%, 9%, 10%. Через 50 миллисекунд после начала анимации свойство будет равно 5%, через 100 - 6, и так далее).

    ...
    Ответ написан
    1 комментарий
  • Где можно найти код JS с подробным описанием как он работает?

    lazalu68
    @lazalu68
    Salmon
    Ну, думаю, во всех учебниках по JS от O'Reilly есть примеры с комментариями. Например, в Javascript: Best parts все примеры разжеваны, мне кажется, досконально. Да и вообще - дико полезная книжка.
    Ответ написан
    Комментировать
  • Как сделать сайт без перезагрузки страниц?

    lazalu68
    @lazalu68
    Salmon
    А что именно там динамичного? Если вы про отзывчивость, то это же просто CSS @media, для Wordpress, думаю, почти все темы отзывчивые
    Ответ написан
  • Как убрать часть верхней границы блока?

    lazalu68
    @lazalu68
    Salmon
    А обязательно нужно чо-то обрезать/вырезать? Мне такое даже в голову не пришло

    Вот без всяких разрывов и вычислений размеров башки этого мужика
    Ответ написан
    4 комментария