2012-01-13 61 views
1

我正在学习jQuery,在阅读书籍时,有一个代码,您正在制作自定义选择器。下面是代码jQuery自定义选择器代码

(function($) { 
    $.extend($.expr[':'], { 
     group: function(element, index, matches, set) { 
      var num = parseInt(matches[3], 10); 
      if (isNaN(num)) { 
       return false; 
      } 
      return index % (num * 2) < num; 
     } 
    }); 
})(jQuery); 

,并在这里呼吁

$(document).ready(function() { 
    function stripe() { 
     $('#news').find('tr.alt').removeClass('alt'); 
     $('#news tbody').each(function() { 
      $(this).children(':visible').has('td') 
       .filter(':group(3)').addClass('alt'); 
     }); 
    } 

    stripe(); 

}); 

我知道.filter()运行对每个子元素。假设如果我的tbody元素有4个tr(行),那么对每个tr运行.filter(隐式迭代)。 现在,当调用.filter(':group(3)')时,我注意到传递给:group函数的参数是。

首次成为

组:功能(元件,索引,火柴,设置)

元件是TR索引是0符合项目成为[“:组(3)“,”组“,”“,”3“]组变成[tr,tr,tr,tr,tr]

现在,我设置了一组,每个tbody标签都有tr的数量,这成为了set数组。但是请告诉我,parseInt(匹配[3],10)如何工作?

我想问问jQuery如何制作匹配数组。我只写:组(3)。如何将匹配值设置为参数列表中的这些值?

这里是HTML的代码片段

<table id="news"> 
    <thead> 
     <tr> 
      <th>Date</th> 
      <th>Headline</th> 
      <th>Author</th> 
      <th>Topic</th> 
     </tr> 
    </thead> 

    <tbody> 
     <tr> 
      <th colspan="4">2011</th> 
     </tr> 
     <tr> 
      <td>Apr 15</td> 
      <td>jQuery 1.6 Beta 1 Released</td> 
      <td>John Resig</td> 
      <td>Releases</td> 
     </tr> 
     <tr> 
      <td>Feb 24</td> 
      <td>jQuery Conference 2011: San Francisco Bay Area</td> 
      <td>Ralph Whitbeck</td> 
      <td>Conferences</td> 
     </tr> 
     <tr> 
      <td>Feb 7</td> 
      <td>New Releases, Videos &amp; a Sneak Peek at the jQuery UI Grid</td> 
      <td>Addy Osmani</td> 
      <td>Plugins</td> 
     </tr> 
     <tr> 
      <td>Jan 31</td> 
      <td id="release">jQuery 1.5 Released</td> 
      <td>John Resig</td> 
      <td>Releases</td> 
     </tr> 
     <tr> 
      <td>Jan 30</td> 
      <td>API Documentation Changes</td> 
      <td>Karl Swedberg</td> 
      <td>Documentation</td> 
     </tr> 
    </tbody> 

    <tbody> 
     <tr> 
      <th colspan="4">2010</th> 
     </tr> 
     <tr> 
      <td>Nov 23</td> 
      <td>Team Spotlight: The jQuery Bug Triage Team</td> 
      <td>Paul Irish</td> 
      <td>Community</td> 
     </tr> 
     <tr> 
      <td>Oct 4</td> 
      <td>New Official jQuery Plugins Provide Templating, Data Linking and Globalization</td> 
      <td>John Resig</td> 
      <td>Plugins</td> 
     </tr> 
     <tr> 
      <td>Sep 4</td> 
      <td>The Official jQuery Podcast Has a New Home</td> 
      <td>Ralph Whitbeck</td> 
      <td>Documentation</td> 
     </tr> 
     <tr> 
      <td>Aug 24</td> 
      <td>jQuery Conference 2010: Boston</td> 
      <td>Ralph Whitbeck</td> 
      <td>Conferences</td> 
     </tr> 
     <tr> 
      <td>Aug 13</td> 
      <td>The jQuery Project is Proud to Announce the jQuery Mobile Project</td> 
      <td>Ralph Whitbeck</td> 
      <td>Plugins</td> 
     </tr> 
     <tr> 
      <td>Jun 14</td> 
      <td>Seattle jQuery Open Space and Hack Attack with John Resig</td> 
      <td>Rey Bango</td> 
      <td>Conferences</td> 
     </tr> 
     <tr> 
      <td>Mar 16</td> 
      <td>Microsoft to Expand its Collaboration with the jQuery Community</td> 
      <td>John Resig</td> 
      <td>Miscellaneous</td> 
     </tr> 
     <tr> 
      <td>Mar 15</td> 
      <td>jQuery Conference 2010: San Francisco Bay Area</td> 
      <td>Mike Hostetler</td> 
      <td>Conferences</td> 
     </tr> 
     <tr> 
      <td>Jan 14</td> 
      <td>jQuery 1.4 Released</td> 
      <td>John Resig</td> 
      <td>Releases</td> 
     </tr> 
     <tr> 
      <td>Jan 8</td> 
      <td>14 Days of jQuery and the New API Browser</td> 
      <td>John Resig</td> 
      <td>Documentation</td> 
     </tr> 
    </tbody> 

    <tbody> 
     <tr> 
      <th colspan="4">2005</th> 
     </tr> 
     <tr> 
      <td>Dec 17</td> 
      <td>JSON and RSS</td> 
      <td>John Resig</td> 
      <td>Documentation</td> 
     </tr> 
     <tr> 
      <td>Dec 14</td> 
      <td>Google Homepage API</td> 
      <td>John Resig</td> 
      <td>Miscellaneous</td> 
     </tr> 
     <tr> 
      <td>Dec 13</td> 
      <td>XPath and CSS Selectors</td> 
      <td>John Resig</td> 
      <td>Miscellaneous</td> 
     </tr> 
     <tr> 
      <td>Dec 12</td> 
      <td>Sparklines with JavaScript and Canvas</td> 
      <td>John Resig</td> 
      <td>Miscellaneous</td> 
     </tr> 
    </tbody> 

</table> 

感谢

回答

1

在你的榜样,matches[3] == "3"。因此parseInt(matches[3], 10);会将“3”转换为整数3(基数10 =十进制)。

+0

hhmm好的谢谢:)以及如何创建数组** [“:group(3)”,“group”,“”,“3”] **? – Basit 2012-01-13 09:15:33

+0

,这取决于它是如何实现的。我认为这将是用()分组括号的某种正则表达式。每个正则表达式的组将是该数组的一个条目。也许别人可以对此有所了解。 – devnull69 2012-01-13 09:43:54

+0

我找到了这个解释,但我不明白它在说什么**匹配:一个包含正则表达式结果的数组,用于解析这个选择器。通常,匹配[3]是数组中唯一相关的项目;在形式选择器中:a(b),匹配项[3]包含b,括号内的文本**。你能解释给我吗?谢谢 – Basit 2012-01-13 10:29:15