Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   $ или jQuery (https://javascript.ru/forum/jquery/58874-%24-ili-jquery.html)

ShutTap 15.10.2015 01:38

$ или jQuery
 
Здравствуйте.
В чем разница между $() и jQuery() ??
В одних местах работает одно, в других другое (модули на сайт joomla, например)

И еще такой вопрос. Выбираю элементы и вывожу что получилось
var	sections = $('#part1, #part2');
    for(k in sections) { 
        str += k+": "+ sections[k]+"\r\n"; 
    } 
    alert(str);

и мне выводит
Код:

0: [object HTMLDivElement]
1: [object HTMLDivElement]
length: 2
prevObject: [object Object]
context: [object HTMLDocument]
selector: #part1, #part2
jquery: 1.11.3
constructor: function(a,b){return new m.fn.init(a,b)}
toArray: function(){return d.call(this)}
get: function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)}
pushStack: function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b}
each: function(a,b){return m.each(this,a,b)}
map: function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))}
slice: function(){return this.pushStack(d.apply(this,arguments))}
first: function(){return this.eq(0)}
last: function(){return this.eq(-1)}
eq: function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])}
end: function(){return this.prevObject||this.constructor(null)}
push: function push() { [native code] }
sort: function sort() { [native code] }
...
куча других данных

это нормально? Мне бы только элементы что я указал... потому что потом, когда я хочу обратиться к выборке, мне эти length prevObject и берутся как элементы тоже. то есть, например
for (pos in sections){
jQuery('#info-'+pos).text('pos');
}

мне выводит не 0 1 2... в элементах #info-0 #info-1 #info-2 и тд...
а ищет #info-length #info-prevObject и тд..

Decode 15.10.2015 01:48

ShutTap, про основы jQuery прочитай.

ShutTap 15.10.2015 02:07

по первому - одно и тоже, просто у меня где то $ уже используется другой библиотекой, а jQuery не конфликтует?

По второму не нашел что-то... Или это нормально, и мне надо использовать .each?

Decode 15.10.2015 02:35

Цитата:

Сообщение от ShutTap
jQuery не конфликтует?

Конфликтует, но есть https://api.jquery.com/jquery.noconflict/

Цитата:

Сообщение от ShutTap
Или это нормально, и мне надо использовать .each

Он и нужен для перебора.

ShutTap 15.10.2015 12:28

ага, так только элементы что нужны берет. спасибо)

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

var screenH = jQuery(document).height();
var top = jQuery(window).scrollTop();
var pos;

sections.each(function(pos, element) {

objTop = jQuery(element).offset().top;
objHeight = jQuery(element).outerHeight(true);

if (objTop < top + screenH/2 && top + screenH/2 < objTop + objHeight){
//break;
}
	
});

jQuery('info').text((pos)+' '+objTop+' '+(top+screenH/2)+' '+(objTop+objHeight)+' '+top);


то есть перебираем нужные элементы при скролле, и если у кого-то попадает через середину - прерываем цикл, и индекс будет указывать на тот элемент, на котором остановились, который через середину проходит.
в блок info вывожу информацию для размеров. pos - undefined. Почему? Вроде объявил переменную за циклом.
И break не работает, хотя вроде читал, должно как в обычном цикле работать, а в итоге весь код не работает. Как прервать тогда перебор цикла?

рони 15.10.2015 12:41

ShutTap,
надо не цикл прерывать, что в данном случае невозможно, а данные сохранять, где изменение внешнего pos?
var screenH = jQuery(document).height();
var top = jQuery(window).scrollTop();
var pos;

sections.each(function(index, element) {

objTop = jQuery(element).offset().top;
objHeight = jQuery(element).outerHeight(true);

if (objTop < top + screenH/2 && top + screenH/2 < objTop + objHeight){
      pos = index
}

});

jQuery('info').text((pos)+' '+objTop+' '+(top+screenH/2)+' '+(objTop+objHeight)+' '+top);

ShutTap 15.10.2015 12:56

аа, break не работает все-таки... в инете писали, что как в обычном цикле. понятно, спасибо)

и такой теперь косяк. длина sections на данный момент 4 (проверяю size())
то есть, индексы должны же быть 0 1 2 3 так?
а у меня 1 2 3 undefined... От чего такое может быть (на странице точно все 4 есть элемента)

рони 15.10.2015 13:08

Цитата:

Сообщение от ShutTap
break не работает все-таки

работает функция в строке 5 закончит обработку, сам перебор продолжится дальше.
нужен макет минимальный, ничего лишнего 4 ваших блока + info + скрипты и css

ShutTap 15.10.2015 15:45

нашел ошибку... вместо
var screenH = jQuery(document).height();

надо было
var screenH = jQuery(window).height();


из-за этого неправильно отрабатывало условие и элемент съезжал


Часовой пояс GMT +3, время: 02:57.