同位素动态添加getSortData

我正在尝试在我的wordpress主题上使用isotope.js。
我会以这种方式对对象进行排序,其中“Series,Music,Cultura,Sport”是由自定义分类法生成的“filter”。

var $container = $j('.containerport'); $container.isotope({ stamp: '.stamp', itemSelector: '.thumbportfolio', getSortData : { Series : function( $elem ) { var isSeries = $j($elem).hasClass('Series'); return (!isSeries?' ':''); }, Musica : function( $elem ) { var isMusica = $j($elem).hasClass('Musica'); return (!isMusica?' ':''); }, Cultura : function( $elem ) { var isCultura = $j($elem).hasClass('Cultura'); return (!isCultura?' ':''); }, Sport : function( $elem ) { var isSport = $j($elem).hasClass('Sport'); return (!isSport?' ':''); } } }); 

我会创建一个动态的getSortData,因为如果我添加一个新的filter,它应该自动出现,而不会把手放在代码中。
有可能吗?
也许使用数组或for循环,但我不知道如何通过jquery访问filter列表。 谢谢!

您可以使用$('selector').data('isotope')访问同位素实例.data $('selector').data('isotope')

例如

 var isotope = $('selector').data('isotope'); 

在你的特定情况下: var isotope = $j('.containerport').data('isotope');var isotope = $container.data('isotope'); 因为你定义了$container

选项存储在名为…等待它的属性中…选项:

 var options = isotope.options; 

getSortData对象纯粹是选项的属性:

 var sortData = options.getSortData; 

您可以使用命名属性添加命名元素,例如:

 sortData.newSort = function($elem){ /* do something here*/ }; 

或间接使用字典:

 sortData["newSort"] = function($elem){ /* do something here*/ }; 

其中“newSort”也可以是包含属性名称的变量:

 var newSortVar = "nameOfPropertyToset"; sortData[newSortVar] = function($elem){ /* do something here*/ }; 

以下是包含.data('isotope')的监视变量的F12 Chrome调试器结果的屏幕截图(取自随机同位素JSFiddle):

在此处输入图像描述

如果您在此之后需要特定帮助,则需要为JSFiddle提供您自己的代码。

我解决了使用这个function:)

 function (sorting) { isotopeArguments.getSortData[sorting] = function (sorting) { return function ($elem) { return $j($elem).hasClass(sorting) ? '' : ' '; }; }(sorting); }