2014-07-22 32 views
0

我有一個看起來像一個html:

<div class="info"> 
     <p>132 Purple Grove</p> 
     <p>Albany, Texas 76801</p> 
     <p class="phone"> 
      <span>Phone: (111) 111-1111</span> 
     </p> 
     <p class="fax">Fax: (111) 111-1111</p> 
</div> 

使用cheerio,我希望得到一個數組與不具有類「電話」或「傳真的所有p元素」。 Cheerio不具備的。不是功能,所以我想,象這樣一個過濾器來複制它:

var addresslines=$(.info).children('p').filter(function(n){ 
    if(!$(n).hasClass('phone') && !$(n).hasClass('fax')){ 
    return n; 
    } 
}); 

我得到的結果如下數組(我已經刪除斷行)過濾掉第一個元素並且保持其他元素不變。我似乎無法理解爲什麼...

結果:

0 Albany, Texas 76801 
1 Phone: (111) 111-1111 
2 Fax: (111) 111-1111 

小提琴:http://jsfiddle.net/2cPLK/

回答

3

當過濾器需要一個函數作爲參數,它填補了兩個參數的功能;第一個是索引,第二個是元素。所以目前你所掌握的變量n是一個整數,而不是一個元素。

var addresslines=$('.info').children('p').filter(function(n, el){ 
    if(!$(el).hasClass('phone') && !$(el).hasClass('fax')){ 
    return el; 
    } 
}); 

working fiddle

+0

另一個嚴重的情況下, RTFM ......感謝您的回答! – xShirase

1

filter的第一個參數是該指數不是元素,所以你應該更改您的代碼如下:

var addresslines=$(.info).children('p').filter(function(n){ 
    if(!$(this).hasClass('phone') && !$(this).hasClass('fax')){ 
     return true; 
    } 
}); 

工作小提琴:http://jsfiddle.net/2cPLK/1/

+1

在這種情況下,n也是不必要的。稍微簡單一點,但比接受的答案多一個字符;) – xShirase