2011-10-13 44 views
12

Giả sử tôi muốn xây dựng một khung/script javascript không phụ thuộc. Có cách nào để sử dụng lớp và yếu tố tuyệt vời của jQuery chọn chức năngThay thế nhẹ vào jQuery cho lớp/id chọn

$('.this') or $('#this') or $('div', '.this') 

Nếu không bị lệ thuộc vào jQuery hoặc sử dụng jQuery nếu nó có sẵn nhưng nếu không, nó hoạt động mà không có nó? Tôi đã tìm kiếm cái này cao và thấp. Có lẽ tôi đang tìm kiếm không chính xác gần nhất tôi đã nhận được là thế này:

Selecting elements without jQuery

Tuy nhiên, đó không phải là sâu như tôi muốn hoặc là tương tự như tôi muốn jQuery. Tôi đã nghĩ về việc đào bới thông qua nguồn jQuery và đưa phần đó ra và sử dụng nó, nhưng tôi hy vọng một người nào đó đã làm điều này và tôi chỉ đang tìm kiếm địa điểm sai và người khác biết về nó.

Cập nhật

này đã được trả lời trong một vài cách khác nhau, và cảm ơn bạn để trả lời nhanh chóng. Tôi đã tìm kiếm sai phương pháp. Cuối cùng tôi đã vào sân: https://github.com/ded/qwery

Tuy nhiên câu trả lời này ở đây không được công việc một cách hoàn hảo: Lightweight alternative to jQuery for class/id selecting

+0

Tôi không chắc tại sao bạn không thể sử dụng jQuery? Cho đến khi các chức năng như thế này được xây dựng trong các trình duyệt theo cách tiêu chuẩn (HAH!), Bạn bị kẹt với việc sử dụng các thư viện tiện ích như jQuery. – SoWeLie

+0

Nó dành cho một kịch bản mà bạn không cần phải dựa vào jQuery, nhưng có thể sử dụng nó nếu có.Không phải tất cả mọi người đều sử dụng jQuery và tôi muốn khai thác nguồn đó và trước khi tôi viết mã cho riêng mình, tôi đã hy vọng có một thứ đã được tạo ra như thế này. – Nijikokun

+1

Nếu bạn thực sự cần phải làm cho các ứng dụng nhẹ, sau đó không sử dụng một jQuery gutted. Đi tìm kiếm trên web cho một khung được thiết kế chỉ dành cho điều hướng và thao tác trên dom. Có hàng tá khung công tác, tôi chắc chắn có một khung phù hợp với nhu cầu của bạn. –

Trả lời

5

Trong tất cả mọi thứ nhưng IE6 và IE7, bạn có thể sử dụng document.querySelectorAll hoặc someElement.querySelectorAll để thực hiện chức năng lựa chọn tương tự.

Cập nhật biết thêm chi tiết:

Dường như ZeptoJS nào sau đây. Này sử dụng các chức năng nhanh chóng cho $$(document, '#myid'), $$(document, '.myclass'), $$(document, 'div') và tìm kiếm chậm cho $$(document, 'div > .myclass')

var classSelectorRE = /^\.([\w-]+)$/, 
    idSelectorRE = /^#([\w-]+)$/, 
    tagSelectorRE = /^[\w-]+$/; 

$$ = function(element, selector){ 
    var found; 
    return (element === document && idSelectorRE.test(selector)) ? 
    ((found = element.getElementById(RegExp.$1)) ? [found] : []) : 
    Array.prototype.slice.call(
     classSelectorRE.test(selector) ? element.getElementsByClassName(RegExp.$1) : 
     tagSelectorRE.test(selector) ? element.getElementsByTagName(selector) : 
     element.querySelectorAll(selector) 
    ); 
} 
+0

Tuy nhiên, có một vấn đề cú pháp, trước khi 'slice.call' bạn đang thiếu' [] .' – Nijikokun

+0

Đó là sự thật. Đây là một vết cắt và dán. Zepto đã định nghĩa 'emptyArray = [], slice = emptyArray.slice'. Tôi sẽ cập nhật mã ở trên. –

3

Bạn đã nhìn zepto.js? Bạn vẫn sẽ phụ thuộc vào một khung, nhưng trọng lượng nhẹ hơn nhiều: khoảng 5kb thay vì 31kb.

12

Câu trả lời cho "Tôi cần một thư viện JS nhỏ mà ..." là trang web này: http://microjs.com/

cụ thể, bạn đang tìm kiếm một cơ selector:

http://microjs.com/#css

+0

Bộ sưu tập đẹp, được sắp xếp gọn gàng bởi microjs.com. Không chắc chắn lý do tại sao họ không bao gồm Sizzle (nhỏ hơn một số trên microj) nhưng chắc chắn là một loạt các lựa chọn xứng đáng! –

+0

Tôi tìm thấy Qwery, mà tôi biết là ở đó và nó thực hiện công việc và nhỏ hơn Sizzle. Cảm ơn vì đề nghị tuy nhiên @GregPettit – Nijikokun

+0

Niềm vui của tôi. Hãy chắc chắn để 'chấp nhận' câu trả lời của DA vì nó là hữu ích nhất cho bạn. :) –

1

MicroSelector. Thậm chí nhỏ hơn và nhanh hơn Zepto, nhỏ hơn Sizzle, nhỏ hơn JQuery.

2

Chỉ cần thử jBone, thư viện cho Sự kiện và thao tác DOM. jBone có hiệu suất tốt hơn nhiều sau đó jQuery/Zepto, kích thước nhỏ hơn và hỗ trợ đầy đủ cho tất cả các bộ chọn, các sự kiện của API.