2012-07-02 35 views
13

Tôi có biến sau đây:Làm thế nào để tăng một chuỗi số bằng 1 với Javascript/jQuery

pageID = 7 

Tôi muốn tích lũy con số này vào một liên kết:

$('#arrowRight').attr('href', 'page.html?='+pageID); 

Vì vậy, đây kết quả đầu ra 7, tôi muốn nối thêm liên kết để nói 8. Nhưng nếu tôi thêm +1:

$ ('# arrowRight'). attr ('href', 'page.html? =' + pageID + 1);

tôi nhận được kết quả như sau: 1.html = 71 thay vì 8.

Làm thế nào tôi có thể tích lũy con số này để được pageid + 1?

+2

Hầu như một ví dụ hoàn hảo về việc "cách thêm hai số với jQuery" không còn là trò đùa nữa! –

Trả lời

26

Hãy thử điều này:

parseInt(pageID, 10) + 1 

Accordint mã của bạn:

$('#arrowRight').attr('href', 'page.html?='+ (parseInt(pageID, 10) + 1)); 
+0

Có nhưng trong ngữ cảnh: ''page.html?' + (parseInt (pageID, 10) + 1) '- subexpression phải được ngoặc đơn. – Pointy

+0

Tôi biết, đã chỉnh sửa câu trả lời của tôi đã là – antyrat

+0

parseInt là không bắt buộc nếu pageID đã là một số nguyên, nó nằm trong câu hỏi của OP. Bạn không cần phải gọi 'parseInt' trên một số chỉ để tăng nó – jackwanders

1

Nó cần phải là một số nguyên, không phải là một chuỗi. Hãy thử điều này:

pageID = parseInt(pageID)+1; 

Sau đó, bạn có thể làm

$('#arrowRight').attr('href', 'page.html?='+pageID); 
+0

Đảm bảo bạn chuyển tham số thứ hai tới 'parseInt' (10) sao cho các giá trị như" 08 "và" 09 "hoạt động bình thường. – Pointy

+0

Rất đúng, thường không hoạt động với các giá trị bắt đầu bằng '0' vì vậy tôi đã bỏ thói quen đó ra. Đẹp bắt! – ninja

0

đơn giản, $('#arrowRight').attr('href', 'page.html?='+(pageID+1));

Dấu ngoặc làm cho việc tính toán được thực hiện đầu tiên trước khi nối chuỗi.

+0

Để downvoters: tại sao? – Shikiryu

0

Chỉ cần thay đổi thứ tự các hoạt động của bạn bằng cách thêm phần bổ sung vào dấu ngoặc đơn; nếu pageid đã là một con số, parseInt() là không cần thiết:

$('#arrowRight').attr('href', 'page.html?='+(pageID+1)); 
+0

Ai đó có thể quan tâm giải thích những downvotes này? Đây là một bản demo cho thấy hoàn toàn tốt rằng phương pháp này hoạt động: http://jsfiddle.net/jackwanders/KX9Q8/ – jackwanders

0

Chừng nào pageid của bạn là số, điều này sẽ là đủ:

$('#arrowRight').attr('href', 'page.html?='+(pageID+1)); 

Vấn đề bạn đang nhìn thấy là JavaScript thường thực hiện theo thứ tự từ trái sang phải, do đó, chuỗi bên trái làm cho + được xem như một bộ nối, vì vậy nó thêm 7 vào chuỗi và sau đó thêm 1 vào chuỗi bao gồm 7.

4

+ xảy ra là toán tử hợp lệ cho bo các chuỗi và số cung cấp các kết quả khác nhau khi cả hai đối số là số và khi ít nhất một đối số không phải là số. Một trong những cách giải quyết có thể là sử dụng toán tử chỉ có ngữ cảnh số nhưng cho kết quả toán học giống nhau, như -. some_var - -1 sẽ luôn giống như thêm 1 đến some_var giá trị bằng số, cho dù đó có phải là chuỗi hay không.

$('#arrowRight').attr('href', 'page.html?='+ (pageID - -1)); 
-1

let pageId = '7' 
 
pageId++ 
 
console.log(pageId)

Ngày nay, bạn chỉ cần pageid ++.

1

Tất cả các giải pháp này giả định rằng số bạn muốn thêm 1 vào nằm trong độ chính xác của máy cho một số nguyên. Vì vậy, nếu bạn có một số lượng đủ lớn trong chuỗi đó khi bạn thêm 1 vào nó sẽ không thay đổi số.

Ví dụ:

parseInt('800000000000000000', 10) + 1 = 800000000000000000 

Vì vậy, tôi đã viết một giải pháp nhanh chóng cho vấn đề

function addOne(s) { 
    let newNumber = ''; 
    let continueAdding = true; 
    for (let i = s.length - 1; i>= 0; i--) { 
     if (continueAdding) { 
      let num = parseInt(s[i], 10) + 1; 
      if (num < 10) { 
       newNumber += num; 
       continueAdding = false; 
      } else { 
       newNumber += '0'; 
      } 
     } else { 
      newNumber +=s[i]; 
     } 
    } 
    return newNumber.split("").reverse().join(""); 
} 

Bây giờ, sử dụng ví dụ tương tự trên

addOne('800000000000000000') + 1 = '800000000000000001' 

Lưu ý rằng nó phải ở lại như một chuỗi hoặc bạn sẽ mất 1 ở cuối.

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