回答
allItems = document.getElementsByTagName('*');
goodItems = [];
for(i=0;i<allItems.length;i++){
if(
allItems[i].className &&
(' '+allItems[i].className.replace(/\s+/g, ' ')+' ').indexOf(' '+'hover'+' ') != -1 &&
(' '+allItems[i].className.replace(/\s+/g, ' ')+' ').indexOf(' '+'selected'+' ') == -1
)
goodItems.push(allItems[i]);
}
如果你需要這些類型的類選擇的時候,你應該考慮其另存爲功能,甚至複製一些jQuery的行爲才能夠做的東西一樣$(".hover").not(".selected");
'indexOf()'對於元素是否具有特定的類並且會產生誤報不是一個好的測試。例如,具有'class =「foo_hover_bar」'的元素將通過此代碼進行匹配。 – 2010-11-08 10:14:50
@Tim很好。謝謝。我更新了代碼。 – 2010-11-08 10:18:21
仍然存在一個問題:在IE <9中這不適用,其中數組沒有'indexOf()'方法。 – 2010-11-08 10:37:01
您還可以使用下面的函數來按類名獲取元素。
excludeClass
這裏是一個可選參數,如果你只定義includeClass
參數,這個函數仍然可以工作。
function getElementsByClassName(includeClass, excludeClass) {
var elements = []; var el = document.getElementsByTagName('*');
var regexp1 = new RegExp("\\b" + includeClass + "\\b");
var regexp2 = new RegExp("\\b" + (excludeClass ? excludeClass : "") + "\\b");
for (var i = 0; i < el.length; i++) {
if (regexp1.test(el[i].className) && !regexp2.test(el[i].className)) { elements.push(el[i]); }
}
return elements;
}
以下將工作。它可以通過使用原生瀏覽器實現getElementsByClassName()
進行優化,在該實現中,將列表過濾爲僅具有「懸停」類的元素。
function hasClass(el, cssClass) {
return el.className && new RegExp("(^|\\s)" + cssClass + "(\\s|$)").test(el.className);
}
var matchingElements = [];
var allElements = document.getElementsByTagName("*");
for (var i = 0, len = allElements.length, el; i < len; ++i) {
el = allElements[i];
if (hasClass(el, "hover") && !hasClass(el, "selected")) {
matchingElements.push(el);
}
}
hasclass功能的+1 – meo 2010-11-08 10:35:47
@Alin:雖然沒關係,因爲它不是在正則表達式上分裂的。它檢查該類是在開始處還是緊接在空白字符前面;該空白字符(如果存在)之前的內容是不相關的。檢查課程結束的邏輯是相似的。 – 2010-11-08 11:51:19
你說得對。抱歉。 – 2010-11-08 11:53:02
- 1. jquery選擇器的純JavaScript對象,而不是DOM元素
- 2. jQuery選擇vs純javascript
- 3. jQuery代碼以純JavaScript
- 4. 將jQuery翻譯爲純javascript
- 5. 純JavaScript等於jquery $(this)
- 6. 將純Javascript改爲JQuery
- 7. 純JavaScript/jQuery/HTML驗證碼
- 8. jQuery的轉換爲純JavaScript代碼
- 9. 在純javascript中的jquery動畫效果
- 10. 使用純javascript的動畫,沒有jquery
- 11. 什麼是這個jQuery選擇器的純JavaScript替代品?
- 12. 無論是使用jQuery的或純JavaScript以淡入淡出和
- 13. 更改錨標記中使用純javascript的圖像源不是jquery
- 14. 轉換的jQuery $不用彷徨到純JavaScript
- 15. 將代碼從jquery轉換爲純javascript
- 16. 如何將JavaScript轉換爲純jQuery
- 17. 將jquery腳本轉換爲純javascript
- 18. java不是純粹的OOP
- 19. jQuery:它是什麼「禁止」在純Javascript中做
- 20. 純JavaScript中的ajaxComplete
- 21. 如何使用純的CSS或純javascript
- 22. 純jQuery替代jQuery的.remove()
- 23. 在jquery和純javascript中創建對象有何不同?
- 24. 什麼是JavaScript中不純功能的例子
- 25. 在純JavaScript
- 26. 純JavaScript驗證
- 27. 純Javascript滑塊
- 28. 與純JavaScript
- 29. 如何將我的代碼更改爲jQuery而不是純JS?
- 30. AppendChild給出純文本只需要使用純JavaScript的HTML(沒有jQuery)
任何你不只是使用jQuery或其他框架的原因? – 2010-11-08 09:20:11
由於性能...我們使用raphael已經 – albuvee 2010-11-08 09:33:08
認識到jQuery是相當不錯的優化,無論你寫的代碼是最有可能不會更有效。 – 2010-11-08 09:37:45