2012-09-19 26 views
63

Có ai biết thư viện Javascript (ví dụ: gạch dưới, jQuery, MooTools, v.v.) cung cấp phương thức tăng thư không?Phương pháp có thể được sử dụng để tăng các chữ cái là gì?

Tôi muốn để có thể làm điều gì đó như:

"a"++; // would return "b" 
+0

Tôi không chắc chắn * cú pháp * bạn đang tìm kiếm là có thể, nhưng hoạt động có thể thông qua các phương pháp. – anson

+0

Ứng dụng là gì? – valentinas

Trả lời

108
function nextChar(c) { 
    return String.fromCharCode(c.charCodeAt(0) + 1); 
} 
nextChar('a'); 
+0

Giải pháp đơn giản, nhưng không xử lý sự xuất hiện của 'z' hoặc 'Z'. – Trent

2

Bạn có thể thử này

console.log('a'.charCodeAt​(0))​ 

Đầu tiên chuyển nó sang số Ascii .. tăng nó .. sau đó chuyển đổi từ Ascii để char ..

var nex = 'a'.charCodeAt(0); 
console.log(nex) 
$('#btn1').on('click', function() { 
    var curr = String.fromCharCode(nex++) 
    console.log(curr) 
}); 

Kiểm tra FIDDLE

+1

Hmm. Cần thêm jQuery. – Jasper

34

javascript Plain nên làm các trick:

String.fromCharCode('A'.charCodeAt() + 1) // Returns B 
2

Thêm vào tất cả những câu trả lời:

// first code on page 
String.prototype.nextChar = function(i) { 
    var n = i | 1; 
    return String.fromCharCode(this.charCodeAt(0) + n); 
} 

String.prototype.prevChar = function(i) { 
    var n = i | 1; 
    return String.fromCharCode(this.charCodeAt(0) - n); 
} 

Ví dụ: http://jsfiddle.net/pitaj/3F5Qt/

3

tôi cần phải sử dụng trình tự của các chữ cái nhiều lần và vì vậy tôi đã thực hiện chức năng này dựa trên câu hỏi SO này. Tôi hy vọng điều này có thể giúp đỡ người khác.

function charLoop(from, to, callback) 
{ 
    var i = from.charCodeAt(0); 
    var to = to.charCodeAt(0); 
    for(;i<=to;i++) callback(String.fromCharCode(i)); 
} 
  • từ - thư bắt đầu
  • đến - lá thư cuối cùng
  • callback (thư) - chức năng để thực hiện cho mỗi chữ cái trong chuỗi

Cách sử dụng:

charLoop("A", "K", function(char) { 
    //char is one letter of the sequence 
}); 

See this working demo

+1

để làm demo. – KNU

12

gì nếu bức thư đưa ra là z? Đây là một giải pháp tốt hơn. Nó đi A, B, C ... X, Y, Z, AA, AB, ... vv Về cơ bản nó tăng các chữ cái giống như ID cột của bảng tính Excel.

nextChar ('yz'); // returns "ZA"

function nextChar(c) { 
 
     var u = c.toUpperCase(); 
 
     if (same(u,'Z')){ 
 
      var txt = ''; 
 
      var i = u.length; 
 
      while (i--) { 
 
       txt += 'A'; 
 
      } 
 
      return (txt+'A'); 
 
     } else { 
 
      var p = ""; 
 
      var q = ""; 
 
      if(u.length > 1){ 
 
       p = u.substring(0, u.length - 1); 
 
       q = String.fromCharCode(p.slice(-1).charCodeAt(0)); 
 
      } 
 
      var l = u.slice(-1).charCodeAt(0); 
 
      var z = nextLetter(l); 
 
      if(z==='A'){ 
 
       return p.slice(0,-1) + nextLetter(q.slice(-1).charCodeAt(0)) + z; 
 
      } else { 
 
       return p + z; 
 
      } 
 
     } 
 
    } 
 
    
 
    function nextLetter(l){ 
 
     if(l<90){ 
 
      return String.fromCharCode(l + 1); 
 
     } 
 
     else{ 
 
      return 'A'; 
 
     } 
 
    } 
 
    
 
    function same(str,char){ 
 
     var i = str.length; 
 
     while (i--) { 
 
      if (str[i]!==char){ 
 
       return false; 
 
      } 
 
     } 
 
     return true; 
 
    } 
 

 
// below is simply for the html sample interface and is unrelated to the javascript solution 
 

 
var btn = document.getElementById('btn'); 
 
var entry = document.getElementById('entry'); 
 
var node = document.createElement("div"); 
 
node.id = "node"; 
 

 
btn.addEventListener("click", function(){ 
 
    node.innerHTML = ''; 
 
    var textnode = document.createTextNode(nextChar(entry.value)); 
 
    node.appendChild(textnode); 
 
    document.body.appendChild(node); 
 
});
<input id="entry" type="text"></input> 
 
<button id="btn">enter</button>

+0

nhận được lỗi "cùng không được xác định". – SeanKendle

+0

Thay đổi 'if (cùng (u, 'Z')) {' thành 'if (u == 'Z') {' và nó hoạt động hoàn hảo, cảm ơn! – SeanKendle

+0

Rất vui khi nó hoạt động và cảm ơn phản hồi. Có lẽ lỗi ban đầu là có bcs chức năng có tiêu đề 'cùng (str, char)' không được dán trong đó? Tôi không biết. –

1

Con này có hoạt động tốt:

var nextLetter = letter => { 
    let charCode = letter.charCodeAt(0); 
    let isCapital = letter == letter.toUpperCase(); 

    if (isCapital == true) { 
     return String.fromCharCode((charCode - 64) % 26 + 65) 
    } else { 
     return String.fromCharCode((charCode - 96) % 26 + 97) 
    } 
} 

EXAMPLES 

nextLetter("a"); // returns 'b' 
nextLetter("z"); // returns 'a' 
nextLetter("A"); // returns 'B' 
nextLetter("Z"); // returns 'A' 
+1

Không hoạt động đối với chữ cái viết hoa –

+0

Bây giờ, nó cũng hoạt động đối với các chữ cái viết hoa :) – NikK

0

Đây thực sự là cũ. Nhưng tôi cần chức năng này và không có giải pháp nào tối ưu cho trường hợp sử dụng của tôi. Tôi muốn tạo ra một, b, c ... z, aa, ab ... zz, aaa .... Việc đệ quy đơn giản này thực hiện công việc.

function nextChar(str) { 
if (str.length == 0) { 
    return 'a'; 
} 
var charA = str.split(''); 
if (charA[charA.length - 1] === 'z') { 
    return nextID(str.substring(0, charA.length - 1)) + 'a'; 
} else { 
    return str.substring(0, charA.length - 1) + 
     String.fromCharCode(charA[charA.length - 1].charCodeAt(0) + 1); 
} 
}; 
Các vấn đề liên quan