2011-07-04 72 views
5

Tôi có đoạn mã sau chuyển thể từ một câu hỏi/câu trả lời trước:Chữ cái đầu tiên của Javascript/jQuery chữ hoa đầu tiên với một số ngoại lệ?

var str = $('title').text(); 
str = str.toLowerCase().replace(/\b[a-z]/g, convert); 
     function convert(){ 
return arguments[0].toUpperCase(); 
     } 
$('title').text(str); 

tôi cần phải thêm một số trường hợp ngoại lệ này như 'và'.

Xin cảm ơn trước.

+0

câu hỏi của bạn là gì? xin vui lòng làm rõ nó? – chhameed

+0

Bạn có thể nhận và đặt tiêu đề trực tiếp. Không có nhu cầu thực sự cho jQuery ở đó. 'str = document.title; document.title = str; ' – user113716

Trả lời

7

Bạn có thể tạo Array ngoại lệ và kiểm tra xem chuỗi phù hợp có khớp không.

Nếu có, chỉ cần trả lại .

var str = document.title, 
    exceptions = ['hello', 'and', 'etc']; 

str = str.toLowerCase().replace(/\b([a-z])\w*\b/g, convert); 

function convert(word, firstChar) { 
    if ($.inArray(word, exceptions) != -1) { 
     return word; 
    } 
    return firstChar.toUpperCase() + word.substr(1); 
} 

document.title = str; 

jsFiddle.

+0

đánh bại tôi để nó loool :) +1 – Val

+0

Bạn nên thay đổi' $ .inArray' kiểm tra để '> -1' hoặc một cái gì đó tương tự như' -1' đó là kết quả nó đưa ra khi không có trận đấu được tìm thấy. (Có thể có một kết quả tại chỉ số '0'). : o) – user113716

+0

Xin chào Alex, cảm ơn vì điều đó. Nhưng không phải là cách đơn giản hơn với .không hoặc sử dụng bộ chọn bộ lọc? – Paul

0

Bạn cũng có thể sử dụng css selector:

.toUpperCase:first-letter { text-transform:uppercase }

và sau đó

<div class="toUpperCase">text</div>

+0

Sẽ không hoạt động trên Foo .. – Paul

+0

Điều này không xem xét các trường hợp ngoại lệ. – alex

+0

Chắc chắn, tôi đã chủ yếu xem xét thực tế rằng nếu nó là một div hoặc bất kỳ yếu tố nào khác, bạn có thể có chữ hoa được thực hiện mà không cần phần regex mà chỉ đơn giản bằng cách thêm một lớp vào phần tử đó. – ebany

Các vấn đề liên quan