2013-07-19 209 views
-2

我以前問過一個問題,但我意識到它太混亂了。基本上我需要想出一種方法來編寫一個選擇器,其行爲如下:JQuery自定義選擇器

對於此容器中的每個元素,搜索該元素是否有一類蘋果或香蕉或蔓越莓或龍果。如果它確實將這個'.style'類添加到THAT元素中。

扭曲的是,我檢查的所有類都是動態的。我需要一種靈活的方法來插入不同的類來在選擇器中搜索。

For example: 
Let's say I have one selector that reads: 
For each element in '<div>', does element have banana OR dragonfruit. 

But another selector would be different: 
For each element in '<div>', does element have cranberry. 

見所以基本上我需要一個動態選擇,它不僅改變了什麼搜索,而且還改變了搜索列表的長度。一些搜索只需要一個過濾器,一些需要多個。

TLDR:有沒有一種方法來寫:

$(.divContainer).hasClass(x or y or z or w or....)其中X,Y,Z,W ....是動態生成不同的類名稱。我怎樣才能做到這一點?!我在考慮使用功能的部位X,Y,Z的通話....基本上使用.hasClass參數在函數內部

+0

不要問一個新問題,編輯你的原始問題來澄清它。 – Barmar

+1

我想你想要的是'.is(「。x,.y,.z」)'。 – Barmar

+0

或者因爲你想添加一個類'.filter('。x,.y,.z')。addClass('style')' –

回答

0

你可以這樣定義一個JavaScript函數:

function hasAnyClasses(possibleClasses) { 

    var container = $('.divContainer'); 

    $(possibleClasses).each(function(idx, el) { 
     if (container.hasClass(el)) { 
      return true; 
     } 
    }); 

    return false; 
} 

然後調用它可以動態生成一系列可能的類:

if (hasAnyClasses(['x', 'y', 'z'])) { 
    // has either class 'x' or class 'y' or class 'z' 
} 
0

查看http://jsfiddle.net/FEz3F/的示例。 Jquery選擇器可以接受用逗號分隔的多個元素。

jQuery的上述代碼:

$(document).ready(function() 
{ 
    var targetDiv = $('.container'); 
    searchElement(targetDiv, '.class1, .class2');   
    function searchElement(div, className) 
    { 
     $(div).find(className).each(function() 
     { 
      // ... 
     }); 
    }     
}); 
0

定義這樣的功能,

function checkSelector(selectionList){ 
     $(selectionList).each(function(index, sel) { 
         if (container.hasClass(sel)) { 
          return sel; 
       } 

} 

然後用開關來評估和應用代碼。

switch (checkSelector(['apple', 'banana'])) { 
     case ('apple'): 
       //Code for apple class 
         break; 
     case ('banana'): 
       //code for banana  
         break; 

     default: 
       break; 
}