2012-08-23 104 views
0

試圖創建一個方法來計算開始和結束元素之間匹配元素的數量。沒有太大的狂野。原來,這兩個console.log的我在中間識別next_itemend_elem使我的瀏覽器無限循環崩潰。理想情況下,我試圖在while循環調用中使用該函數,以便在next_item.index() < end_elem.index()捕獲它時阻止它通過end_elem,但顯然每次都會破壞我的瀏覽器。我不知道爲什麼。爲什麼這會造成無限循環並導致瀏覽器崩潰?

find_the_count_of_elements_between_two_elements: function(class_to_count, start_elem, end_elem) { 
    var number_of_times = 0; 
    var start = 0; 
    var end = 1; 
    next_item = start_elem.nextAll().slice(start, end); 

    while (start < 6) { 

     // console.log(next_item.index() < end_elem.index()); 
     console.log("next_item : " + next_item.index()); 
     console.log("end_elem : " + end_elem.index()); 

     if (next_item.hasClass(class_to_count)) { 
     number_of_times++; 
     }; 

     start++; 
     end++; 
     next_item = start_elem.nextAll().slice(start, end); 
     console.log(next_item); 
    }; 
    return number_of_times; 
    }, 
+0

在旁註中,你有沒有考慮['nextUntil'](http://api.jquery.com/nextUntil/)? – Yoshi

+0

有日誌/控制檯輸出也是有幫助的(如果需要,清除它們)。 – Jon

+1

任何理由* next_item *沒有被宣佈爲本地? –

回答

1

聲明JQuery的對象作爲全局(即沒有0​​)似乎混淆某些瀏覽器,所以它總是一個好主意,把它們聲明您的本地功能。

注:我很高興這個信息幫助,但如果有人能真正解釋爲什麼出現這種情況,他們應該得到的解決方案標誌,不是我

+0

再次感謝Joachim – Trip

1

看來,你的函數find_the_count_of_elements_between_two_elements只能用於工作的兄弟姐妹。這是因爲您使用..index()來確定元素在DOM中的位置 - 相對於它的兄弟。

在這種情況下,您可以更便宜地實現相同的目標。我將使用過濾器而不是class_to_count,因爲它更通用。

function count_matching_elements_between(filter, start_elem, end_elem) { 
    return $(start_elem).nextAll(filter).filter($(end_elem).prevAll()).length; 
} 

要找到特定類的元素,你可以使用:

count_matching_elements_between('.myClass', '#myStart', '#myEnd'); 

或提供明確的DOM節點或jQuery的選擇開始和結束。

順便說一句:你編輯你的代碼示例? 我沒有看到任何「if(next_item.index()< end_elem.index())」。

+0

哇,太神奇了!非常感謝Peter !! – Trip

+0

這真是太棒了,非常感謝你。 – Trip

+0

也沒有編輯它。它作爲一個'console.log',我從while語句中移除,試圖將它作爲一個日誌來推導出來,我可能能夠以這種方式安全地生成它。 – Trip

相關問題