2010-07-31 57 views
7

Tôi có một chuỗi có số trong đó mà tôi muốn thay thế bằng một số khác.Thay thế một số trong một chuỗi bằng jquery

tức

<a href="" id="my_link">blah blah 32 blah blah</a> 

Tôi biết có được sẽ chỉ là 1 số trong chuỗi này.

tôi có thể có được điều này cho đến nay:

var my_string = $('a#my_link').text(); 

Nhưng về cơ bản tôi không biết làm thế nào để sau đó thực hiện một tìm kiếm trên my_string cho một chữ số và thay thế con số đó với cái gì khác.

Điều đó có thể thực hiện được với jQuery không?

Cảm ơn mọi ý tưởng.

Trả lời

10

Nhiều phương pháp jQuery như .text() có thể chấp nhận hàm trả về giá trị để chèn.

Hãy thử nó ra:http://jsfiddle.net/6mBeQ/

$('#my_link').text(function(i,txt) {return txt.replace(/\d+/,'other value'); }); 

này loại bỏ sự cần thiết phải chạy bộ chọn hai lần.

Ngoài ra, khi bạn nhận được một phần tử theo ID của nó, nó thực sự nhanh hơn một chút nếu bạn không bao gồm tên thẻ.

Vì vậy, thay vì

$('a#my_link') 

nó là tốt hơn để làm

$('#my_link') 

như tôi đã làm ở trên.

+0

Bây giờ, đây là một giải pháp không đòi hỏi hai yếu tố lấy. Tốt đẹp. –

+0

Cảm ơn @Gert. : o) – user113716

+0

Tôi sẽ cần phải đi vào thói quen sử dụng các chức năng như thế. Đó là một cách thực sự gọn gàng khi thay thế công cụ. –

1

này sẽ làm việc cho các số tự nhiên đơn giản có chứa 0 - 9.

var my_string = $('a#my_link').text().replace(/[0-9]+/, 'replacement'); 

Nếu bạn cần phải phù hợp số phức tạp hơn, chẳng hạn như số thập phân và số âm, thì đây sẽ làm việc:

var my_string = $('a#my_link').text().replace(/-?[0-9]*\.?[0-9]+/, 'replacement'); 

Nếu bạn cần khớp với các ký tự phức tạp hơn, như ký hiệu số mũ hoặc số có dấu phẩy, bạn cần sửa đổi regex một cách thích hợp - cách bạn thực hiện điều đó sẽ phụ thuộc vào mức độ nghiêm ngặt mà bạn muốn xác thực.

+0

Đó không phải là những gì OP hỏi. Nó sẽ trả về ký tự đầu tiên của số ('3' trong trường hợp này); anh ấy muốn thay thế ** toàn bộ số ** bằng một số khác. – Krevan

+0

Cảm ơn, đã chỉnh sửa :-) Tuy nhiên, regex sẽ khớp với toàn bộ số, chứ không phải chữ số đầu tiên. – Jhong

4
var new_string = $('a#my_link').text().replace(/[0-9]+/, "somethingelse") 

Thay thế somethingelse bằng, tốt, cái gì khác. :)

+0

hahahahha, thích phần cuối – mrateb

2
$('a#my_link').text($('a#my_link').text().replace(/\d+/,'something')); 
+1

'$ ('a # my_link'). Văn bản ($ (this) .text() .thay thế (/ \ d + /, 'something'));' nên tốt hơn nữa –

+2

@Mikulas Dite - Hãy thử nó và bạn sẽ khám phá ra rằng 'this' trong ví dụ của bạn không đề cập đến yếu tố bạn nghĩ. ;) –

0

Trước tiên, bạn cần phải lặp qua từng từ bằng cách chia nhỏ ký tự khoảng trắng bằng cách sử dụng hàm split() và gửi kết quả đến một mảng chuỗi.

Khi bạn làm điều đó, hãy kiểm tra từng từ cho số đó. Nếu bạn tìm thấy số sử dụng hàm jquery replaceWith(): http://api.jquery.com/replaceWith/

Hy vọng điều đó sẽ hữu ích.

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