Как вставить параметры

я так понимаю у вас должны быть две кнопки, на которые нужно повесить события примерно так:
Код:
$('.sort-by-button-group').on( 'click', 'button', function() {
  var sortByValue = $(this).attr('data-sort-by');
  $grid.isotope({ sortBy: sortByValue });
});
$('.sort-by-button-group').on( 'click', 'button', function() {
  var sortByValue = $(this).attr('data-sort-by');
  $grid.isotope({ sortBy: sortByValue, sortAscending: false
 });
});

для полноты картины не хватает html кода
 
var $container = jQuery('#portfolio'); $items = $container.children('.element'); $container.imagesLoaded( function(){ $container.isotope({ itemSelector : '.element', layoutMode: '<?php echo $layout[0];?>', sortBy:'order', sortAscending: function(){if (1==1){return false}}, getSortData: { name: function( $elem ) { var name = $elem.find('.dataorder'), itemText = name.length ? name : $elem; return itemText.text(); }, date: function($elem){ var name = $elem.find('.dataorder'), itemText = name.length ? name : $elem; return itemText.text(); }, order: function($elem){ var _order = $elem.hasClass('element') ? $elem.attr('data-order':( $elem.find('.order').text(); return parseInt(_order); } } } ); tz_init('<?php echo $params -> get('tz_column_width',233);?>'); });
Код:
var $container = jQuery('#portfolio');
$items = $container.children('.element');
$container.imagesLoaded( function(){
$container.isotope({
itemSelector : '.element',
layoutMode: '<?php echo $layout[0];?>',
sortBy:'order',
sortAscending: 'ascdesc',
getSortData: {
name: function( $elem ) {
var name = $elem.find('.dataorder'),
itemText = name.length ? name : $elem;
return itemText.text();
},
date: function($elem){
var name = $elem.find('.dataorder'),
itemText = name.length ? name : $elem;
return itemText.text();


},
order: function($elem){
var _order = $elem.hasClass('element') ?
$elem.attr('data-order'):
$elem.find('.order').text();
return parseInt(_order);
}
ascdesс: function($elem){
if (1==1){return false}else{return true}
}
}
}

);
tz_init('<?php echo $params -> get('tz_column_width',233);?>');
});
как то так :)
 
это яваскрипт. а где хтмл код? где кнопки? где контейнер с блоками, которые будут сортироваться?
 
  • Нравится
Реакции: ZiX
Спасибо всем.
В общем я так и не понял каким образом там присвоенная парметру функция срабатывает.

Вместо переписывания кода и добавления обработчиков, я просто воткнул $price = 0 - $price;
Таким образом при клике на первый баттон срабатывает код
HTML:
  name: function( $elem ) {
  var name = $elem.find('.price'),
  itemText = name.length ? name : $elem;
             $price = Number(itemText.text().replace(/\D+/g,""))
  return $price;
  },

А при клике на вторую кнопку срабатывает другой участок. Она просто делает отрицательные числа.
Сортируем опять же таки по возрастанию, но так как числа вернуло отрицательные, а Разумеется чем больше отняли - тем дальше от нуля, то одна и та же сортировка
sortAscending: true
Будет сортировать то по убыванию, то по возрастанию.

Напомню что суть была в том что я динамечески не мог менять sortAscending: true на sortAscending: false

HTML:
  date: function($elem){
  var name = $elem.find('.price'),
  itemText = name.length ? name : $elem;
             $price = Number(itemText.text().replace(/\D+/g,""))
             $price = 0 - $price;
  return $price;
  },

p.s. если кто подскажет ссылки на мануал по дебагу js , и как всё это там делать, буду благодарен.
 
В этом коде ошибка\неточность. Есть участок кода, который мешает работе. Если его вырезать - сортировка работает..

вот участок кода
HTML:
function($elem){
                    var $elem   = $container.find('.element'),
                            max_order   = $container.find('.element:first').attr('data-order');
                    if($elem.length){
                        $elem.each(function(index){
                            if(parseInt(max_order) < parseInt(jQuery(this).attr('data-order'))){
                                max_order   = parseInt(jQuery(this).attr('data-order')) +1;
                            }
                        })
                    }

                    jQuery('#tz_append').attr('data-order',max_order);
                    var $opClass = getFilterOptions(),
                            $b_class = jQuery('#tz_append').attr('class').split(' ');

                    if($opClass.length){
                        jQuery.each($opClass,function(i,el){
                            if(jQuery.inArray(el,$b_class) === -1){
                                jQuery('#tz_append').addClass(el);
                            }
                        });
                    }
                }

Если вырезать всё, кроме var $opClass = getFilterOptions(), - сортировка сработает. Но всё отображается в 1 колоночку. Вместо 3х.
В чём может быть причина?


Вот полдный код.

HTML:
    var $container = jQuery('#portfolio');
    $items = $container.children('.element');
    $container.imagesLoaded( function(){
        $container.isotope({
            itemSelector : '.element',
            layoutMode: '<?php echo $layout[0];?>',
            sortBy:'order',            sortAscending: false,
            getSortData: {
                name: function( $elem ) {
                    var name = $elem.find('.name'),
                        itemText = name.length ? name : $elem;
                        zzz = itemText.text();
                        console.log(itemText);
                    return itemText.text();
                },
                date: function($elem){
                    var number = $elem.hasClass('element') ?
                      $elem.find('.create').text() :
                      $elem.attr('data-date');
                      console.log(number);
                    return number;
                   

                },
                order: function($elem){
                    var _order = $elem.hasClass('element') ?
                            $elem.attr('data-order'):
                            $elem.find('.order').text();
                    return parseInt(_order);
                }
            }
        }, function($elem){
                    var $elem   = $container.find('.element'),
                            max_order   = $container.find('.element:first').attr('data-order');
                    if($elem.length){
                        $elem.each(function(index){
                            if(parseInt(max_order) < parseInt(jQuery(this).attr('data-order'))){
                                max_order   = parseInt(jQuery(this).attr('data-order')) +1;
                            }
                        })
                    }

                    jQuery('#tz_append').attr('data-order',max_order);
                    var $opClass = getFilterOptions(),
                            $b_class = jQuery('#tz_append').attr('class').split(' ');

                    if($opClass.length){
                        jQuery.each($opClass,function(i,el){
                            if(jQuery.inArray(el,$b_class) === -1){
                                jQuery('#tz_append').addClass(el);
                            }
                        });
                    }
                }

        );
        tz_init('<?php echo $params -> get('tz_column_width',233);?>');
    });
 
Код:
                        jQuery.each($opClass,function(i,el){
                            if(jQuery.inArray(el,$b_class) === -1){
                                jQuery('#tz_append').addClass(el);
                            }
                        });
jQuery.each
не уверен что нужно именно так
обычно перебирают элементы массива а не объект jQuery
 
и как быть?
 
скажите , когда вызывается
function($elem){

Могу я поставить условие что бы код в ней срабатывал по этому словию, и не срабатывал если жму определённую кнопку?
 
Занимательный js. В коде что давал выше, есть анониманя функция, через запятую

}, function($elem){
var $elem = $container.find('.element'),

В каком случае она вызывается? Сделал такой код. alert ('vsegda') - не срабатывает. Почему?

Код:
<script>

first = {
p1: 1,
top: {
al: function() {
        alert('al')
    }, function () {alert ('vsegda')}
   
   
   
    }

};

first.top.al();


</script>
 
Назад
Сверху