Brand from Amber: Так вот я и спросил как бы в начале: что быстрее
В вашем случае разницы заметно не будет. До тех пор, пока на странице не будет миллион элементов которым нужно менять стили/перемещать js-ом. (и в вашем примере условие будет выполняться очень часто, если ширину окна браузера менять, а это не правильно )
В общем как уже сказал, все что можно через css делать, лучше делать именно через него (в том числе и уменьшается вероятность багов.)
-----------
Мемори:
Имхо, также сами коды манипуляции DOM написны на C++ и значит имеют почти максимальное быстродействие, JS это обертка на вызовами функций которые написаны на C++ (смотрим исходники Лисы и Хрома). То есть продуманная струтура программ на JS с минимум циклов и тд даст весьма высокое быстродействие.
Я за методы ничего не говорил, я говорю за сам DOM, он тугой.
Так как когда создавался, то никто не думал, что сайты будут динамические, и манипулировать с ним будут.
function createCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + value + expires + "; path=/";
}
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca;
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
$('.city').on('click', function(e) {
$('.city-choose').addClass('active');
e.preventDefault();
});
$('.city-choose li').on('click', function(e) {
var some = $(this).data('some'); //
var val = $(this).data('val');
var all = $(this).data('all');
$('.phones .tel').attr('href', 'tel:'+all).empty().apped('<span>'+some+'<span> '+val);
$('.city').text( $(this).text() );
$('.city-choose').removeClass('active');
if( !readCookie('city') ) {
createCookie('city', $(this).text()+'&'+all, 1);
}else {
eraseCookie('city');
createCookie('city', $(this).text()+'&'+all, 1);
}
e.preventDefault();
});
$('.city-choose .close').on('click', function(e) {
$('.city-choose').removeClass('active');
Так вот я и спросил как бы в начале: что быстрее
В вашем случае разницы заметно не будет. До тех пор, пока на странице не будет миллион элементов которым нужно менять стили/перемещать js-ом. (и в вашем примере условие будет выполняться очень часто, если ширину окна браузера менять, а это не правильно )
В общем как уже сказал, все что можно через css делать, лучше делать именно через него (в том числе и уменьшается вероятность багов.)
-----------
Имхо, также сами коды манипуляции DOM написны на C++ и значит имеют почти максимальное быстродействие,
JS это обертка на вызовами функций которые написаны на C++ (смотрим исходники Лисы и Хрома).
То есть продуманная струтура программ на JS с минимум циклов и тд даст весьма высокое быстродействие.
Я за методы ничего не говорил, я говорю за сам DOM, он тугой.
Так как когда создавался, то никто не думал, что сайты будут динамические, и манипулировать с ним будут.
На самом деле, все что можно сделать через css, нужно делать css-ом.
js только на крайний случай (перенос блока куда-нибудь)
Так как работа с DOM деревом очень ресурсоемкая, а это лишняя нагрузка.
Да и править/читать проще css.
Спасибо за отзыв.
Продолжаю работать.
Точно обьявили эту переменную в глобальной области?
и в каком методе ошибку бьет?
я понял, так ui - это не глобальная переменная
мы с метода close не видим ее, так как в методе select это параметр
вы можете создать дополнительную переменную
Пример кода:
вроде бы как-то так
А где это ui обьявлено вообще?
скиньте полностью функцию эту
может ui вообще нету, поэтому то и ошибка
http://prntscr.com/gv4bsy это уберите
если будет ошибка, то мы попадаем в "catch"
а вообще, если ошибку вызывает
if(ui.item.id){
то почему вы внутри условия делаете проверку?
нужно ведь до этого условия
Попробуйте этим споcобом:
try {
// ваш код
} catch(e) {
// попадем сюда, если произошла ошибка
alert('error');
}
---------------------------
Может вы даже http://prntscr.com/gv471x в это условие не попадаете ?
Не проверял, но думаю, что должно работать.
ну и нужно дата атрибуты заполнить для телефонов. По js коду видно где и какие атрибуты http://prntscr.com/guoh22
https://jsfiddle.net/3ndxgtqz/
Наверное как-то так.