• Как получить любой элемент относительно текущего, над которым совершено действие?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Ищем ближайшую структурную единицу и внутри неё находим нужный элемент:

    $(document).on('click', '.order-button', function () {
    	$('.quastion-theme').attr('value', $(this).closest('.price_wrap-block').find('.price_wrap-block-header h3').text());
    });
    Ответ написан
  • Убрать полосу прокрутке на сайте?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Ваши проблемы в блоке с классом map_block. Достаточно поставить ему:
    .map_block {
    	overflow: hidden;
    }

    А вообще, ощущение каши.
    Ответ написан
    2 комментария
  • За счет чего Тостер может составить конкуренцию русскоязычному Stackoverflow?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Воспользуюсь случаем передать привет своей семье написать пару замечаний.

    1. Убрать отметку ответа решением
    а) Не с руки бегать за пользователями, задающим вопросы, с требованием «анугад цени время других». Ни модераторам, ни отвечающим. В конце концов, расчёт на поисковую выдачу и долгую жизнь тем.

    б) Зачастую знания и умения спрашивающего не дают ему возможность оценить верность ответа. Если учесть, что нередко правильные ответы даются с примесью WTF, то неумеренное эго автора вопроса бывает сильно уязвлено, и верный ответ остаётся за бортом. Не менее редко решением выбираются глупые ответы.
    Думаю, FanatPHP может рассказать куда больше:)

    Пример: Как работает свойство display с его разными значениями?
    Хоть кол на голове теши — что проще, то и верно.

    2. Ввести минусование ответов
    Не всем, а как на стеке — только с рейтингом не менее ... (скажем, >20 по тэгу). Чтобы тупые ответы опускались вниз. Может, и скрывать ответы при наборе ... (скажем, -5) отрицательных отметок.

    3. Рейтинг
    Нередко встречаю умных и грамотных людей, не имеющих времени на надрачивание рейтинга. Как вариант, просто недавно зарегистрировавшиеся участники. Нужен механизм оценки «авторитетов» (в хорошем смысле этого слова) для повышения рейтинга.

    4. Оценка комментариев
    Достаточно часто комментарии дополняют ответ, делают его более объёмным, и заслуживают своей оценки. Почему нет возможности оценить такой вклад?

    5. Ввести тэги по вопросам
    Зачастую вопросы называют так, что найти их или очень трудно, или просто невозможно.
    Пример: Как отследить появление новых элементов в DOM?
    В итоге люди тратят время, в то время как ответы уже есть на Тостере Как отловить создание нового IFrame на странице?

    Можно предлагать при публикации вопроса список тэгов и это (возможно) даст возможность найти ответ на вопрос до его опубликования. После публикации тэги могут выбрать остальные.
    Другая польза от тэгов — поиск для повторных вопросов (см. ниже).

    6. Аналогичный вопрос
    Если ответ на подобный вопрос уже есть на Тостере, пользователи могут указать их. Такой блок должен находиться непосредственно рядом с вопросом.

    7. Плюсы для отвечающих
    Почему бы не использовать связь с хабром для раздачи плюшек отвечающим? Например, членство, карму etc.

    8. Библиотека решений
    Иногда кажется, что грамотный и хорошо оформленный ответ просто тонет в куче мусора и нет никакого смысла ни в расписывании хода мыслей, ни в оформлении.
    Пример #1: CSS: Почему происходит смещение изображения при line-height идентичной высоте блока?
    Пример #2: Почему при добавлении тега appendChild'oм, контент не отображается?
    Пример #3: Разница между background: url('...') и background: url(...)?
    И много-много других, к которым я не имею никакого отношения.

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

    9. Технические доработки
    Поиск — нет введённого запроса в поле поиска.
    Ответ — нет горячих клавиш для форматирования.
    Комментарий — нет возможности форматировать текст.
    Комментарий — как быстро получить ссылку (тема + якорь)?
    Текстовое поле для комментария — делаешь такие примеры codepen.io/cleric/pen/oBwqn и не понимаешь, почему его подстройка по высоте поля на Тостере не слишком-то корректно работает.
    Поле с кодом — вроде несложно добавить white-space: pre-wrap; Для элемента pre, чтобы не было горизонтальной прокрутки для непереносимых строк.

    Пы.Сы. Отдельное спасибо Сергею Протько за веру в этот ресурс.
    Ответ написан
    34 комментария
  • Почему так странно ведут себя события после ajax запроса?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Заменяйте
    $('#auth-a').click(function(e){...});
    на
    $(document).on('click', '#auth-a', function(e){...});
    Ответ написан
    2 комментария
  • Как понять из-за чего появляется такая ошибка?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Потому что парсер, или интерпретатор, или какой-то другой механизм анализа данных встретил неожиданный символ.
    Часто встречается, когда любители твердить «яновичёк» дважды проводят десериализацию в JSON или вместо функции передают в $() непосредственно код этой функции.

    Ищите ответы тут Почему пишет, что не найден разделитель?
    Если не найдёте — прочтите строку выше.
    Ответ написан
  • Как сделать открытие другой страницы после отправки формы?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Для загрузки ответа от сервера в нужное окно после отправки формы у неё есть атрибут target.
    Причём такая возможность есть не только в форме, но и даже в кнопке в виде атрибута formtarget.

    В качестве целевого окна указывают его имя — атрибут name. Для открытия в новом окне указывают стандартное имя _blank. По умолчанию используется значение _self.

    А вообще, уровень вопросов и ответов стал катастрофически низок...
    Ответ написан
    4 комментария
  • Почему такой порядок интерпретации?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    1. Переменная изменяется в конце цикла, а alert() вызывается 3 раза в начале цикла до изменения переменной. В цикле 3 итерации, а после окончания его работы переменная получает значение 3.

    2. В цикле происходит вызов асинхронно исполняемого кода. Это значит, что на момент выполнения этого кода цикл уже закончил свою работу и значение переменной равно 3.

    И прекратите употреблять слова, которые не имеют смысла в данном контексте. Причём тут «интерпретация»? Интерпретация происходит до выполнения кода.
    Ответ написан
  • Вынос link c css из head за footer?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Насколько я могу судить, рекомендуется минимизировать количество и размер файлов.
    Если это необходимо, писать CSS непосредственно в коде страницы.
    Но выносить вниз аж за html?.. Любопытно, но этими советчиками планируется сначала показать текст, а когда-то потом замереть, построить CSSOM, и оформить страницу?) Я так никогда не делал, не делаю и не буду делать.
    Ответ написан
    Комментировать
  • Bookmarklet в новом окне - gtmetrix?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    f.target='_blank';
    Ответ написан
    Комментировать
  • Как осуществить замену с помощью регулярок внутри слова?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    s = s.replace(/([\wа-яё])-([\wа-яё])/ig, '$1$2');

    Для Notepad++
    Найти:
    ([\wа-яё])-([\wа-яё])
    Заменить на:
    \1\2
    Флажок «Учитывать регистр» должен быть снят.
    Флажок «и новые строки» нужно поставить.
    Ну и понятно, нажать на радиокнопку «Регулярные выражения»:)
    Ответ написан
    4 комментария
  • JQuery: var $el = $(el), что такое $el?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Просто способ именования. Знак доллара в начале имени показывает автору, что в переменной хранится объект jQuery.
    Ответ написан
    1 комментарий
  • Как удалить елементы массива джаваскрипт сохранив упорядоченность и длину?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Обратный цикл
    var array = ['one', 'two', 'tree'],
    	toDelete = [1, 2];
    
    toDelete.sort();
    for (var i = toDelete.length; i--;) {
    	array.splice(toDelete[i], 1);
    }
    Ответ написан
    2 комментария
  • Почему пишет, что не найден разделитель?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    2 ошибки, которые бросились в глаза:

    Передача текста, который идёт в eval(), вместо callback-функции.
    Сейчас
    $(document).ready(
    код
    );

    Нужно
    $(function () {
    код
    });

    Вторичная попытка получить JSON, когда это было сделано ранее
    Сейчас
    $.ajax({
    	...
    	dataType: 'json'
    }).done(function (data) {
    	var b = $.parseJSON(data);
    })

    Нужно
    $.ajax({
    	...
    	dataType: 'json'
    }).done(function (data) {
    	//просто используем data — это уже JSON
    }).fail(function (data) {
    	//А тут сработает, если запрос провален или пришёл не JSON
    });
    Ответ написан
    Комментировать
  • Слайдер, почему не работает кнопка назад?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Вообще этих слайдеров как собак нерезаных.
    Особенно раздражает промотка на туеву хучу пикселей при переходе с последнего слайда на первый и наоборот.
    А ведь можно и так https://jsfiddle.net/petroveg/8d9m4hqu/5/
    Ответ написан
    Комментировать
  • Как правильно преобразовать кастомный js-код в приложение?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    1. Вам не показалось, для функциональности лучше использовать data-атрибуты, что позволить использовать события без привязки к стилевому оформлению.

    2. Навешивание нескольких обработчиков на одно событие в одном и том же узле — нормальная практика, если код в обработчиках не связан (не конфликтует с другими, код разных обработчиков не должен выполняться в строго определённом порядке). Это позволяет снимать тот ли иной обработчик при необходимости, не затрагивая работу остальных.

    3. В динамически изменяющейся структуре предпочтительней использовать всплытие событий. Например, так:

    $(document).on('click', 'selectors', function () {...});

    Это позволит не дожидаться формирования DOM для регистрации и при изменении структуры документа не будет неловких ситуаций, когда элемент вроде есть, но никому до этого дела нет.

    4. Регистрация обработчика в конкретном узле позволяет остановить всплытие события. Это — одна из основных причин регистрации обработчиков не в window или document, а в конкретном узле.
    Другая причина — не реагировать на события в однотипных узлах за пределами конкретного элемента. Пример — вы вставляете область, в которой и реализован функционал (например, область с картой).
    Ответ написан
    Комментировать
  • Как повесить событие на новый элемент DOM?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Не нужно искать никаких тэгов заранее. В этом случае можно навешивать обработчики в head, не дожидаясь формирования DOM.
    $(document).on('change', '.qty', function (e) {
    	...
    });
    Ответ написан
    Комментировать
  • Существует ли способ обработать CSS файл через JS?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Есть такая коллекция document.styleSheets, которая содержит ссылки на подключённые стили (элементы style и link). В каждом элементе коллекции CSSStyleSheet есть доступ к правилам.
    Ответ написан
    3 комментария
  • Какой литературой развить свои знания о дизайне?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Ответ написан
    Комментировать
  • Ширина блока, css?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Учитесь пользоваться инструментами, которые вам дают браузеры. Вот создаваемый скрипт, вставляющий контент:

    e = document.createElement("SCRIPT");
    e.src="http://client-shop-logistics.ru/index.php?...";
    e.type="text/javascript";
    document.getElementById("calcul_9493").appendChild(e);

    Стоит он после
    <div id="calcul_9493"></div>

    Если нет возможности изменить параметры приходящего контента (откуда он берёт именно такую ширину?), поставьте после этого скрипта (очевидно, он использует document.write) следующий код

    $('#calcul_9493').children(':first-child').css({
    	width: 'auto'
    });
    Ответ написан
    3 комментария
  • Почему при добавлении тега appendChild'oм, контент не отображается?

    Petroveg
    @Petroveg
    Миром правят маленькие с#@&ки
    Я не знаком с теми объектами, чьими методами вы пользуетесь для добавления, поэтому сразу к делу — у каждого языка разметки есть идентификатор Namespase. Более того, для ряда атрибутов (например, xlink:href) также есть своё пространство имён.

    Для создания элементов и таких атрибутов существуют специальные методы createElementNS(), setAttributeNS().

    В привычных createElement() и setAttribute() используется пространство имён xHTMLwww.w3.org/1999/xhtml. К тому же, setAttributeNS() можно использовать и вместо привычного setAttribute() с указанием null для пространства имён. В этом случае будет использовано то пространство имён, в котором создан сам элемент.

    Набросал пример для создания объектов с описанием в виде JSON.

    Структура и указание пространств имён
    var NS = 'http://www.w3.org/2000/svg',
    	NSL = 'http://www.w3.org/1999/xlink',
    	elements = [
    		{
    			name: 'svg',
    			attr: {
    				'class': 'main'
    			},
    			children: [
    				{
    					name: 'symbol',
    					attr: {
    						id: 'square',
    						viewBox: '0 0 100 100'
    					},
    					children: [
    						{
    							name: 'rect',
    							attr: {
    								x: 0,
    								y: 0,
    								width: 100,
    								height: 100,
    								fill: 'rgba(51,102,204,1)'
    							}
    						}
    					]
    				},
    				{
    					name: 'symbol',
    					attr: {
    						id: 'circle',
    						viewBox: '0 0 100 100'
    					},
    					children: [
    						{
    							name: 'circle',
    							attr: {
    								cx: 50,
    								cy: 50,
    								r: 50,
    								fill: 'rgba(51,204,102,1)'
    							}
    						}
    					]
    				}
    			]
    		},
    		{
    			name: 'svg',
    			attr: {
    				'class': 'icon'
    			},
    			children: [
    				{
    					name: 'use',
    					attr: {
    						'xlink:href': '#square'
    					}
    				}
    			]
    		}
    	],
    	newElement = {
    		name: 'svg',
    		attr: {
    			'class': 'icon'
    		},
    		children: [
    			{
    				name: 'use',
    				attr: {
    					'xlink:href': '#circle'
    				}
    			}
    		]
    	};

    Создание элемента
    function createSVG (elem) {
    	var svgElement = document.createElementNS(NS, elem.name);
    
    	if (elem.attr) {
    		Object.keys(elem.attr).forEach(function (value) {
    			if (value.indexOf('xlink') < 0) {
    				svgElement.setAttribute(value, elem.attr[value]);
    			} else {
    				svgElement.setAttributeNS(NSL, value, elem.attr[value]);
    			}
    		});
    	}
    
    	if (elem.children) {
    		elem.children.forEach(function (value) {
    			svgElement.appendChild(createSVG(value));
    		});
    	}
    
    	return svgElement;
    }

    Использование
    elements.forEach(function (element) {
    	document.body.appendChild(createSVG(element));
    });
    document.body.appendChild(createSVG(newElement));

    Стили
    .main {
    	display: none;
    }
    .icon {
    	width: 100px;
    	height: 100px;
    }
    Ответ написан
    Комментировать