Hướng dẫn

Nếu bạn lần đầu ghé thăm blog của mình, bạn có thể vào phần hướng dẫn để biết thêm thông tin và cách sử dụng blog này.

Chủ Nhật, 31 tháng 10, 2010

Thông báo nội dung học của lớp Javascript

Theo thông tấn xã bắp cải đưa tin, vào lúc 0 giờ ngày hôm nay, tổng số lượng người tham gia lớp học là 18 người, trong đó có 17 nam và 1 nghi vấn là nữ. Danh sách đầy đủ xin xem tại đây.

Những nội dung học được quan tâm
  1. Ajax (89%)
  2. Chưa biết nhiều về những hiệu ứng, trang trí website bằng Javascript (89%)
  3. Phát triển những extension, plugin cho những thư viện, framework (89%)
  4. Chưa biết cách sử dụng những thư viện, framework Javascript (Jquery, Prototype, Mootool...) (83%)
  5. Tự phát triển thư viện riêng cho mình (78%)
  6. Tương tác giữa Javascript và các thẻ HTML (61%)
  7. Sử dụng biến và hàm (56%)
  8. Những cú pháp và cách sử dụng những đối tượng cơ bản (56%)
  9. Kiểm tra thông tin form (56%)

Thứ Sáu, 29 tháng 10, 2010

Position và Z-Index trong CSS

Trong HTML, mặc định các thẻ được phân tích và hiển thị từ trái qua phải, từ trên xuống dưới. CSS được trang bị những thuộc tính left, top, right, bottom để chỉ định vị trí tương đối của thẻ, nhưng khi ở chế độ mặc định, việc chỉ định left, top, right, bottom không có tác dụng
<div style="background: red; left: 10px; top: 20px; width: 100px; height: 100px;"></div>


Đoạn mã này không dịch chuyển thẻ DIV lại vị trí 10px theo chiều ngang và 20px theo chiều dọc, nguyên do là vì thẻ DIV mặc định có position là static. Position đóng vai trò quan trọng trong việc dàn trang, chỉ định vị trí hiển thị thẻ như mong muốn, thuộc tính position có những loại giá trị sau:

Thứ Năm, 28 tháng 10, 2010

Ứng dụng dò lỗi tập tin MySQL

Những người từng sử dụng MySQL đã quen với việc xuất / nhập (Export / Import) dạng mã SQL để chuyển giao hay xử lý. Tất nhiên việc để nguyên mã SQL được xuất từ một ứng dụng sinh mã SQL thì không có gì để bàn cãi, vì cú pháp của ứng dụng đó sinh ra phải chính xác. Nhưng giả sử chúng ta cần thay thế một đoạn nhỏ nào đó trong mớ SQL này thì sao. Việc thay thế đó đôi khi phát sinh những lỗi cú pháp không mong muốn. Những lỗi này thường là:
  • Xóa nhầm phần đóng của chú thích (comment)
  • Xóa nhầm dấu kết thúc chuỗi (chuỗi đơn hoặc chuỗi kép)
  • Thêm dư hoặc chưa escape ký tự nháy đơn hoặc nháy kép trong nội dung chuỗi
  • Escape sai ký tự quy định do thừa dấu \ trong chuỗi (MySQL có những ký tự sau có thể đi kèm với dấu \ là: 0, ', ", \, b, n, r, t, Z, %, _)

Thứ Tư, 27 tháng 10, 2010

JSON, đơn giản là JSON

JSON hay còn gọi là JavaScript Object Notation, là một chuẩn dùng để truyền tải dữ liệu. Vậy hóa ra JSON chả làm được gì rồi, đúng vậy, thực tế thì anh JSON này chả có chút "võ công" gì cả, thế mà "giang hồ" lại đồn đại là anh này "mạnh lắm", làm được "nhiều thứ" lắm thì không chính xác "lắm". JSON là một dạng văn bản thuần, mô tả về một loại thông tin nào đó mà "con người" có thể đọc được(human-readability, còn con khác thì không đọc được nhá).

Danh sách những đồng chí đã đăng ký lớp học Javascript (Cập nhật thường xuyên)

Trước hết mình xin cảm ơn sự quan tâm đến lớp học này của mình, đây cũng là lần đầu tiên mình viết blog và gõ đầu trẻ bất đắc dĩ, nên có thể thiếu sót trong quá trình chuẩn bị cũng như phổ biến thông tin, mong các anh em, bà con, đồng chí "chém" nhẹ tay để mình được nhờ.

Sau đây là danh sách những học sinh bị "lừa"(trúng thầy dỏm) đăng ký, danh sách sẽ được cập nhật từng ngày.
Một số nick có tên không dấu, mình xin phép không biên tập lại, lỡ hiểu nhầm thì nguy.
  1. Tuy
  2. Nam
  3. Do Van Manh
  4. Minh Sơn
  5. Ý Nhi
  6. thinhit
  7. tuyencode
  8. 7chulinhchi 
  9. dungnguyen
  10. siêu
  11. Ali333
  12. htd
  13. vienleuy
  14. potatokudo
  15. Secuirty
  16. pbn
  17. cuibap
  18. pino_o1
  19. kbt09
  20. Biết Chết Liền
  21. gatesun

Nếu bạn nào đã đăng ký mà chưa có tên vui lòng liên hệ linqtojs@gmail.com hoặc góp ý ngay dưới bài viết này

Nếu bạn chưa đăng ký thì vui lòng đăng ký tại http://linq2js.blogspot.com/2010/10/lop-day-javascript-truc-tuyen.html

Tìm trẻ lạc
Hiện tại e-mail của bạn namprojs...... không gửi được, vui lòng phản hồi e-mail của bạn tại linqtojs@gmail.com

Là một web designer tôi cần biết những gì ?

Ngày đó, khi còn đi học ngành CNTT, mình và một số bạn chỉ biết đến 2 chuyên ngành chính là Công nghệ Phầm Mềm và Công nghệ Mạng (chứ không phải Phần Cứng đâu nha). Khi đó những bạn học Phần Mềm do tiếp xúc với nhiều phần mềm (hì hì, tất nhiên rồi), nên có kinh nghiệm hơn bên mạng, khi ra trường đi làm thì sẽ theo những hướng sau: làm lập trình ứng dụng, làm lập trình web (số tiết học hơi bị "thiếu thốn"), làm thiết kế web (có biết chi đâu mà, nhưng cũng làm đại) và đôi khi "lấn sân" sang quản trị mạng ... Thế đó, nhắc lại mới thấy, có những nghề mà ngày đó chúng mình không có những nơi đào tạo, không bài bản, khi đi làm chỉ biết nhắm mắt mà "lụi" thôi. Ngày nay, các cơ sở, các trường chuyên về thiết kế mọc lên khá nhiều, âu cũng là một sự thuận lợi cho các bạn trẻ. Thôi không dông dài nữa, mình đi thẳng vào vấn đề chính đây.

Thứ Ba, 26 tháng 10, 2010

Tạo plugin cho jQuery dùng để kiểm tra sự hợp lệ của form (Phần 3)

Trở lại nhiệm vụ lần trước, chúng ta đã tìm hiểu qua những khái niệm: gọi liên hoàn / không liên hoàn, cấu hình dành cho plugin... Hôm nay công việc sẽ khó "nhai" hơn, nào bắt đầu thôi.

Giới thiệu những thẻ tương tác dữ liệu
Trước khi bắt tay vào việc "code kiếc" chúng ta cần biết những phần tử (element) nào cần / được kiểm tra. Hiện tại HTML có những phần tử sau chứa giá trị khả dĩ có thể chuyển dữ liệu về máy chủ hoặc có thể tương tác với người sử dụng:
Trong những thẻ trên, thẻ input có thuộc tính value dùng để nhận / gán giá trị, riêng thẻ hình ảnh input type="image" thì sử dụng thuộc tính src.

Tạo plugin cho jQuery dùng để kiểm tra sự hợp lệ của form (Phần 2)

phần 1, chúng ta đã biết cấu trúc để viết một plugin cho jQuery, phần 2 này mình sẽ trình bày về cách xử lý dựa trên đối tượng jQuery.

Những cách sử dụng liên hoàn và không liên hoàn trong jQuery

Có thể gọi đây là một chuỗi những lệnh gọi phương thức xử lý của jQuery:
jQuery('#myheader').addClass('.hilite');
jQuery('#myheader').text('Hello world !!!');
Ở trên là từng câu lệnh riêng lẽ, ta có thể rút gọn:
jQuery('#myheader').addClass('.hilite').text('Hello world !!!');
2 khai báo trên đều có kết quả như nhau, nhưng lợi điểm thì khác nhau. Khai báo đầu tách riêng từng câu lệnh, điều này khiến cho jQuery phải truy vấn tìm ra tập thẻ thỏa điều kiện 2 lần ứng với mỗi lần gọi. Nhưng ở khai báo sau thì jQuery chỉ cần một lần truy vấn để tìm thẻ và thông tin những thẻ đó được bảo lưu cho những lần gọi tiếp theo sau. Để có thể gọi một chuỗi liên hoàn như khai báo hai, điều cần thiết là ta phải nắm rõ kết quả trả về của một phương thức jQuery, nếu phương thức trả về đối tượng jQuery thì có nghĩa ta có thể gọi liên hoàn, ngược lại thì không:
jQuery('#myheader').attr('href');
jQuery('#myheader').attr('href', 'http://google.com');
Với lệnh dòng 2, phương thức attr với tham số 'href' sẽ trả về giá trị thuộc tính href của thẻ #myheader, như vây ta không thể tiếp tục gọi liên hoàn theo sau câu lệnh này được. Đến dòng 3, phương thức attr có tham số 'href''http://google.com' sẽ thực hiện việc gán giá trị của thuộc tính href của thẻ #myheader, phương thức này trả về đối tượng jQuery, ta có thể gọi liên hoàn. Như bạn thấy đó, cùng một phương thức attr, ở mỗi cách gọi (ngữ cảnh) khác nhau, thì kết quả trả về sẽ khác nhau, chúng ta cần tham khảo tài liệu về jQuery để có thể vận dụng chính xác.

Thứ Hai, 25 tháng 10, 2010

Tạo plugin cho jQuery dùng để kiểm tra sự hợp lệ của form (Phần 1)

Lời mở đầu
jQuery là một thư viện Javascript khá nổi tiếng, thư viện này "bảo kê"  tất cả những thao tác xử lý về thẻ một cách linh hoạt và đơn giản. Ai chưa biết về thư viện này thì mất nửa "cuộc đời", mà biết rồi thì cũng mất thêm nửa "cuộc đời" để tìm hiểu nó, nói cho vui vậy thôi chứ jQuery theo mình là rất tuyệt nhưng không hẳn là "vô đối", ngoài jQuery còn có những "đại gia" như mootool, extJS, prototype... khi có thời gian mình sẽ giới thiệu nhiều hơn về chúng.

Làm sao để viết plugin cho jQuery ?
Viết một "cắm vào" (plugin) cho jQuery khó không ? Theo mình thì đơn giản vô cùng, quan trọng là viết xử lý có phức tạp hay không, chứ viết một cái được gọi là plugin của jQuery thì còn dễ hơn ăn bánh mì.

Chủ Nhật, 24 tháng 10, 2010

Tối ưu hóa website (Phần cuối)

Với phần cuối này, mình xin trình bày về cách tối ưu hóa hình ảnh trong website. Hình ảnh là thành phần quan trọng, được sử dụng khá nhiều trong trang, chính vì vậy bạn cần phải cân nhắc khi sử dụng hình ảnh hợp lý. Tối ưu hình ảnh có những công đoạn sau:

Cách sử dụng hình ảnh
Hình ảnh hiển thị thường thông qua 2 cách, sử dụng thẻ img và sử dụng thuộc tính background. Ở đây mình xin khuyến khích các bạn nên sử dụng thuộc tính background khi có thể, vì những lợi điểm sau:

Dễ thay đổi bằng hình ảnh khác khi cần, chỉ cần thay đổi nội dung CSS là có thể chuyển đổi hình ảnh khác, thay vì phải vào mã HTML dò tìm thẻ IMG và thay đổi thuộc tính src

Có thể tạo hiệu ứng thay đổi khi di chuyển mouse vào thẻ, chỉ cần định thêm style dành cho :hover là ta có thể có 2 trang thái hiển thị khác nhau trên cùng một thẻ, điều này muốn thực hiện trên thẻ IMG phải sử dụng Javascript

Thứ Bảy, 23 tháng 10, 2010

Lớp dạy Javascript trực tuyến

Hình thức / thời gian
Mình sẽ đăng những bài viết lý thuyết Javascript liên tục, các bạn sẽ đọc và tham gia thảo luận, gửi bài tập qua mẫu form ở cuối bài. Sau khi nhận bài mình sẽ xem và phản hồi ý kiến, đồng thời đăng tải lên blog. Thời gian học sẽ bắt đầu từ ngày 01/11/2010

Nội dung
Khóa học sẽ dài hoặc ngắn tùy theo chuyên đề của khóa học, hiện tại mình sẽ gửi mẫu đăng ký và tùy theo kết quả đăng ký mình sẽ quyết định chuyên đề, thời gian của khóa học là gì.

Kết quả
Mình không tham vọng sẽ đem đến cho bạn được những kỹ năng như bạn mong muốn, nhưng trên hết, sẽ là sự cố gắng chia sẻ kiến thức của chính mình để giúp các bạn có một số vốn kiến thức nhất định qua mỗi khóa học. Trong quá trình thảo luận, nếu có những điểm bạn nhận thấy mình truyền đạt không chính xác, hãy góp ý xây dựng bằng cách trình bày nguyên nhân, nội dung sai lạc, có liên kết tham khảo càng tốt, nhằm mục đích hoàn thiện nội dung khóa học.

Chơi xếp kim cương 2 thật đã trên web của bạn

Game xếp kim cương 2 nguyên bản của Popcap
Đối với mỗi người chúng ta, dòng game xếp kim cương của hãng Popcap đã không còn xa lạ nữa. Nhớ lại cái thời người người chơi xếp kim cương, nhà nhà chơi xếp kim cương (hì hì, nói hơi quá nhưng thực ra thì các bạn nữ mê trò này lắm). Hôm nay mình xin trình bày cách cài đặt một game xếp kim cương lên website, blog, forum hoặc bất cứ đâu, miễn là nơi đó có hỗ trợ javascript, vì game này được viết bằng javascript mà.

Thứ Năm, 21 tháng 10, 2010

Tối ưu hóa website (Phần 3)

Xem lại Phần 1, Phần 2

Ở 2 bài trước mình đã trình bày về tối ưu hóa CSS và Javascript, hôm nay mình xin trình bày về tối ưu hóa HTML. HTML là một phần mã không thể thiếu của một trang web, ở bất kỳ đâu cũng có HTML, vì vậy nếu ta tối ưu hóa được HTML là đã cải thiện tốc độ web khá nhiều. HTML như các bạn đã biết, là một ngôn ngữ đánh dấu có cấu trúc, nó có những cú pháp tùy tiện hơn Javascript và CSS, dù bạn có viết sai cú pháp thì nó vẫn có khả năng hiển thị, còn hiển thị "cái gì" thì không xác định được. Để tối ưu HTML gồm có những công việc sau:

Tối ưu cấu trúc sử dụng thẻ
Việc sử dụng thẻ một cách hợp lý, "tiết kiệm", nói chung là càng ít thẻ càng tốt. Ít thẻ thì được lợi gì ? Ít thẻ thì mã ít hơn, trong sáng hơn, dễ hiểu hơn, ít thẻ thì trình duyệt biên dịch nhẹ gánh biên dịch hơn, giảm thiểu trường hợp "cạn" bộ nhớ. Vậy tiêu hoang thẻ là như thế nào ? Xem đoạn mã dưới:
<table class="box">
    <tr>
        <td class="box-header"></td>
    </tr>
    <tr>
        <td class="box-body">Nội dung</td>
    </tr>
    <tr>
        <td class="box-footer"></td>
    </tr>
</table>
"Tình hình" là đoạn mã trên có 7 thẻ, nếu sử dụng một cách khác:

Điều kỳ diệu của đối tượng Date trong Javascript

Lần này mình xin "đổi gió" chút đỉnh. Hôm nay mình xin trình bày về đối tượng Date trong Javascript. Ngày tháng là yếu tố quan trọng, được sử dụng khá nhiều, nên việc tính toán ngày tháng cũng muôn hình vạn trạng.

Khởi tạo một đối tượng Date
var now = new Date();
Với lệnh khởi tạo Date không tham số, hệ thống sẽ trả về ngày hiện tại. Ta cũng có thể khởi tạo đối tượng Date bằng cách chỉ định rõ những tham số theo thứ tự sau: năm, tháng, ngày, giờ, phút, giây:
var vnwomanDay = new Date(2010, 9, 20);
alert(vnwomanDay);
var vnwomanDayAndTime = new Date(2010, 9, 20, 12, 20, 30);
alert(vnwomanDayAndTime);


Có một điểm cần lưu ý, trong Javascript, tháng được tính từ 0 - 11, nghĩa là 0 là tháng 1, 1 là tháng 2 ... Chúng ta phải luôn ghi nhớ điều này để tránh tính toán hoặc hiển thị nhầm.

Tối ưu hóa website (Phần 2)

Xem lại phần 1

Ở phần 1, mình đã trình bày về cách "nén" mã javascript, sang phần này mình sẽ giải quyết tới "anh chàng" CSS.
Vậy CSS có khả năng "nén" được như javascript không ?
Ngoài cách "nén" ra còn có cách nào để tối ưu hóa CSS không ?

Chúng ta sẽ đi vào từng vấn đề trên.
CSS cũng tương tự như javascript, là một dạng văn bản có cấu trúc, mà đã là văn bản thì ta đều có thể "nén" được, tuy nhiên, tỉ lệ nén ở CSS không nhiều, và chỉ có một cách nén duy nhất. Thông thường các trình nén CSS sẽ làm như sau:

Thứ Ba, 19 tháng 10, 2010

Tối ưu hóa website (Phần 1)

Tối ưu hóa là cách làm cho website hoạt động trơn tru hơn, tốt hơn. Nhìn chung mọi người thường hiểu là làm sao cho website của tôi "chạy nhanh". Đôi khi có những định nghĩa tối ưu hóa website tương đương với việc tối ưu hóa đối với bộ máy tìm kiếm (SEO), ở đây mình xin trình bày khía cạnh tối ưu hóa nội dung, tài nguyên website.

Những kiến thức này dựa trên việc tham khảo tài liệu của 2 chương trình Page Speed (anh Goo) và YSlow (anh Yah), mình đã giản lược đồng thời mô tả chi tiết hơn một số khái niệm để các bạn có thể nắm được.

Tối ưu hóa tài nguyên website
Tài nguyên website được kể ở đây chính là: hình ảnh, tập tin javascript, tập tin css, tập tin html. Thông thường ta sử dụng những tài nguyên này và không nghĩ rằng có thể làm gì với nó để cho nó phục vụ website tốt hơn. Việc tối ưu hóa chúng nhằm mục đích cải thiện thời gian tải về của trang web (là làm nhanh lên đó), việc cải thiện này cũng sẽ làm giảm tải phía máy chủ nhưng đôi lúc cũng bắt máy chủ làm việc nhiều hơn.

Thứ Hai, 18 tháng 10, 2010

Những định dạng hình ảnh thường được sử dụng cho trang web

Hình ảnh là thành phần không thể thiếu của một trang web. Hình ảnh dùng để trang trí, nhấn mạnh nội dung, truyền tải thông điệp. Một trang web được xem là đẹp thì không thể thiếu hình ảnh.

Với vai trò khá quan trọng như thế, ta cần phải nắm rõ về những định dạng ảnh thường được sử dụng, từ đó vận dụng tốt hơn trong việc hiển thị trang.

Hiện nay được sử dụng nhiều nhất là 3 định dạng ảnh: GIF, JPG (JPEG), PNG. Mỗi định dạng này có những ưu khuyết điểm riêng, phục vụ tốt cho một mục đích hiển thị đặc thù. Mình sẽ trình bày sơ lược về "tiểu sử" cũng như cách sử dụng chúng, những chi tiết liên quan thì mình sẽ dẫn link tham khảo.

Khắc phục lỗi chiều cao thẻ nhỏ hơn chiều cao của font mặc định của IE6

Khi tạo box ta thường sử dụng 4 thẻ DIV với cấu trúc như sau
<div class="box">
    <div class="box-top"></div>
    <div class="box-middle">Nội dung</div>
    <div class="box-bottom"></div>
</div>
Ta sử dụng một hình ảnh làm nền:


Các phần box-top, box-middle, box-bottom chứa những phần hình ảnh tương ứng: cạnh trên của hộp, phần giữa hộp, cạnh dưới hộp. Do phần cạnh trên và cạnh dưới có chiều cao nhỏ 10px, ta đặt style như sau:
.box-top {height: 10px; background: ...}
.box-bottom {height: 10px; background: ...}
Hiển thị ở những trình duyệt khác thì hoàn toàn chính xác:


Riêng IE6 bắt đầu "khó chịu":


Lần này ta được "ban tặng" cho 2 khoảng trống rất chi là vô duyên. Vậy khoảng trống này từ đâu ra ? Xin thưa rằng, trong IE6 nếu một thẻ có chiều cao X, và chiều cao của font là Y thì IE6 sẽ chọn chiều cao lớn nhất giữa 2 giá trị này làm chiều cao hiển thị của thẻ, điều này làm phát sinh những khoảng trống ngoài dự liệu.

Chủ Nhật, 17 tháng 10, 2010

Linq2Js: Thực thi chậm trong Linq2Js

Đặc tính thực thi chậm trong Linq2Js giúp cho hệ thống tiết kiệm bộ nhớ khi ta chưa sử dụng kết quả, lấy ví dụ:
// Bước 1: Khởi tạo mảng
var numbers = [1, 2, 3, 4];
// Bước 2: Sắp xếp theo thứ tự giảm
var sortedNumbers = linq(numbers).desc();
// Bước 3: Thêm một phần tử mới vào mảng gốc
numbers.push(5);
// Bước 4: Xuất ra kết quả
sortedNumbers.alert();


Ở tại bước 2, nếu ngay lúc đó biểu thức linq thực thi và sắp xếp lại thứ mảng giảm dần là không cần thiết, vì ta chưa sử dụng đến kết quả sắp xếp đó, đến bước 3 ta thêm một phần tử vào mảng numbers thì linq vẫn chưa làm công việc của mình, chỉ khi ta gọi những hàm kết xuất như alert, array.. thì toàn bộ biểu thức mới được thực thi.

Theo như mình tham khảo một số thư viện khác, ngay tại bước 2 thì linq của họ đã thực thi và chuyển hóa thành một mảng số mới đã được sắp xếp, những thao tác sau đó với linq đều không có tác dụng.

Khắc phụ lỗi "rớt hàng", khi sử dụng những thẻ có thuộc tính float và clear

Giới thiệu
Ta có đoạn mã html sau
<style type="text/css">
    .page {width: 800px; margin: 0px auto; background: white; border: 1px solid silver;}
    .left-column {float: left; width: 200px; background: #eee;}
    .right-column {float: right; width: 200px; background: #eee;}
    .center-column {margin-left: 210px; margin-right: 210px; background: #eee;}
    .entry {background: #ddd; margin-top: 10px;}
    .entry .title {display: block;}
    .entry .image {float: left; width: 100px; height: 100px; border: 1px solid silver;}
</style>
<div class="page">
    <div class="left-column">
        Nội dung cột trái
    </div>
    <div class="right-column">
        Nội dung cột phải
    </div>
    <div class="center-column">
        Nội dung cột giữa
        <div class="entry">
            <a class="title">Tiêu đề</a>
            <a class="image"><span>Hình ảnh</span></a>
            <div class="summary">Nội dung sơ lược, nội dung sơ lược</div>
        </div>
        <div class="entry">
            <a class="title">Tiêu đề</a>
            <a class="image"><span>Hình ảnh</span></a>
            <div class="summary">Nội dung sơ lược, nội dung sơ lược</div>
        </div>
    </div>
</div>


Kết quả hiển thị:


Khắc phục lỗi double margin (bị nhân đôi khoảng cách) của một thẻ sử dụng float trên IE6

Giới thiệu
Khi tạo giao diện bằng thẻ DIV, đa phần chúng ta đều sử dụng float để canh chỉnh các cột, hoặc những box. Lỗi double margin là lỗi tạo nên một khoảng trống có kích thước bằng gấp đôi kích thước ta chỉ định, lấy ví dụ:

<style>
    body {margin: 0px; padding: 0px;}
    .wrapper1 {border: 5px solid red; float: left; width: 200px; margin: 20px;}
    .wrapper2 {border: 5px solid blue; float: right; width: 200px; margin: 20px;}
</style>
<div class="wrapper1">Nội dung bên trong</div>
<div class="wrapper2">Nội dung bên trong</div>

Trong trang html trên, ta có 2 class wrapper1 và wrapper2, đều sử dụng thuộc tính float là left và right, có margin là 20px. Khi hiển thị trên firefox:


Như bạn thấy, ở firefox hoặc những trình duyệt trừ IE6, kích thước vùng trống margin đúng bằng 20px. Nhưng khi ta duyệt bằng IE6:


Thì bỗng dưng IE6 "hào phóng" "khuyến mãi" cho ta thêm 20px nữa, đúng là "mua 1 tặng 1", lỗi này gây khó chịu cho người thiết kế giao diện html rất nhiều, vì mọi thành phần trong trang sẽ bị xáo trộn khi kích thước bị tăng lên đột ngột, ở đây chỉ là 20px thành 40px, nhưng nếu ta margin khoảng 100px thì sẽ được là 200px, một con số khủng khiếp đủ để làm biến dạng bộ mặt website.

Linq2Js: Một số phương thức thông dụng

var numbers = linq([10, 9, 8, 7, 6]);
numbers.alert('First number: ', 'first');
alert('First number: ' + numbers.first());
numbers.alert('Last number: ', 'last');
alert('Last number: ' + numbers.last());
numbers.alert('Second number: ', 'get', [1]);
alert('Second number: ' + numbers.get(1));
numbers.alert('Count: ', 'count');
numbers.desc().alert('Lowest number: ', 'first');
alert('Lowest number: ' + numbers.desc().first());
numbers.alert('Min: ', 'min');
numbers.concat([1, 2, 3]).alert();

Linq2Js: Sử dụng chuỗi những phương thức truy vấn

Để sử dụng liên tục những phương thức truy vấn ta cần nắm rõ kết quả trả về của một phương thức phải là đối tượng LINQ.
Ví dụ
linq([1, 2, 3, 4, 5]) // hàm linq trả về đối tượng LINQ chứa 1, 2, 3, 4 nên ta có thể gọi phương thức tiếp theo sau
linq([1, 2, 3, 4, 5]).odd() // và ta có thể tiếp tục vì odd() trả về đối tượng LINQ chứa danh sách những số l
linq([1, 2, 3, 4, 5]).odd().array() // nhưng đến đây ta không thể gọi tiếp phương thức của LINQ nữa, vì array() là phương thức trả về một mảng giá trị
// tương tự như vậy
linq([1, 2, 3, 4, 5]).odd().first() // trả về 1 nên chuỗi truy vấn sẽ kết thúc

Linq2Js: Tìm những phần tử có chứa một nội dung chỉ định

Để tìm những phần tử nào đó thỏa điều kiện cho trước ta sử dụng phương thức where.
Tìm những phần tử có chứa ký tự a
var names = ["Tom", "Dick", "Harry"];
// Cách viết thông thường với tham số where là một hàm dùng để kiểm tra
linq(names).where(function() { return this.indexOf('a') != -1; }).alert();
// Cách viết ngắn gọn
linq(names).where('this.indexOf("a") != -1').alert();
// Sử dụng phương thức contains
linq(names).contains('a').alert();

Linq2Js: Tìm tên có độ dài chỉ định

Chúng ta sử dụng đoạn mã sau để tìm những tên có độ dài lớn hơn hoặc bằng 4 ký tự
var names = ["Tom", "Dick", "Harry"];
linq(names).where('this.length >= 4').alert();

Linq2Js: Cú pháp Linq2Js

Khời tạo một đối tượng LINQ
linq([1, 2, 3, 4, 5]);

Hàm linq sẽ nhận những tham số dạng chuỗi, tập hợp, mảng để tạo thành đối tượng LINQ.

Những cú pháp khởi tạo khác
linq(array)
Tạo đối tượng LINQ chứa các phần tử của mảng array

linq(string)
Tạo đối tượng LINQ chứa mảng các ký của chuỗi string

linq(regex, string)
Tạo đối tượng LINQ chứa những kết quả tìm của biểu thực chính quy regex dựa trên chuỗi giá trị string

linq(number)
Tạo đối tượng LINQ chứa dãy số từ 0 đến number

linq(from, to)
Tạo đối tượng LINQ chứa dãy số từ from đến to

Sau khi khởi tạo được đối tượng LINQ ta có thể sử dụng những hàm truy vấn của nó để nhận được những kết quả như mong muốn.

Thứ Bảy, 16 tháng 10, 2010

Linq2Js: Tải và cài đặt Linq2Js

Những tập tin cần thiết
Bạn có thể tải thư viện này tại địa chỉ http://sourceforge.net/projects/linq2js/files/linq2js-20101016.js/download
Cũng như bạn có thể tải kèm cơ sở dữ liệu JSON được phát sinh từ northwind http://sourceforge.net/projects/linq2js/files/northwind.js/download để phục vụ cho việc chạy thử những ví dụ.

Cài đặt
Do tên của thư viện khi tải về có dạng linq2js-(ngày cập nhật), nếu bạn không thích thì có thể đổi tên thành linq2js.js hoặc linq.js cho ngắn gọn
Chèn đoạn mã html sau vào tài liệu của bạn:
<script src="duong_dan_luu_tru_cua_ban/linq2js.js" type="text/javascript"></script>
<script src="duong_dan_luu_tru_cua_ban/northwind.js" type="text/javascript"></script>

Giới hạn
Do thư viện đang trong quá trình phát triển, nên tạm thời mình sẽ nén lại cho ngắn gọn mã javascript, khi nào có điều kiện thuận lợi mình sẽ xuất bản mã nguồn đầy đủ.

Linq2Js: Giới thiệu về Linq2Js

Khơi nguồn cảm hứng và sáng tạo
Ý tưởng lập trình thư viện này bắt nguồn từ việc mình rất thích LINQ của Microsoft, sau đó lả lướt ở một số trang cũng thấy có khá nhiều thư viện dạng này. Máu "made in tự tui" nổi lên và mình đã cố gắng code một cái thư viện cho thật customize theo ý mình. Có thể nhiều bạn xem việc này như việc đẽo lại cái bánh xe, nhưng qua đó mình cũng đã tự nâng kinh nghiệm mình đôi chút, và cũng như mình mong muốn đây là sân chơi thảo luận của những bạn yêu thích LINQ, Javascript như mình.

Trước hết, LINQ là gì ?
LINQ - Language-integrated query là dạng truy vấn tích hợp, giúp cho lập trình viên giảm nhẹ những thao tác về tập hợp, về cơ sở dữ liệu... Còn muốn biến thêm chi tiết thì có thể nhờ anh Goo .

Còn nữa, Javascript là gì ?
Ngày nay, web đã quá phổ thông, có rất nhiều nhiều những trang web khác nhau, muôn hình vạn trạng. Mỗi trang web đều có những hình thái, giao diện riêng, nhưng chung quy lại thì một trang web có 3 thành phần chính: html, css, javascript. Vậy anh javascript nhà ta là một thành phần thiết yếu, chuyên đảm nhận những trách nhiệm to lớn như: tạo hiệu ứng, xử lý nội dung, kiểm tra hoặc chuyển giao nội dung trang web...

Và theo cách hiểu đơn giản của mình LINQ 2 JS là một thư viện được tích hợp dựa trên nền tảng javascript, phục vụ cho việc truy vấn dữ liệu một cách hiệu quả hơn, ngoài ra có thể bạn sẽ cảm thấy những tên như: linq in javascript, linq for javascript ... phù hợp hơn.
Related Posts Plugin for WordPress, Blogger...

Hãy nói không với 4T

Hướng dẫn sử dụng chức năng góp ý
Bạn có thể sử dụng những thẻ <b>, <i>, <a>. Để chú thích đoạn mã bạn có thể sử dụng thẻ [code=type]  [/code], với type là những loại mã sau js, css, html. Chú ý: Khi sử dụng thẻ [code=html] bạn cần theo thế những ký tự < , > thành [] hoặc bạn có thể sử dụng bộ chuyển đổi. Những loại mã khác thì bạn thay thế < , > thành &lt;&gt; hoặc bạn cũng có thể sử dụng bộ chuyển đổi