2010-02-27 26 views
12

Tôi đang phát xung quanh với việc tìm và thay thế văn bản.jquery tìm và thay thế văn bản, không có id phần tử

Vấn đề duy nhất tôi gặp là tìm chuỗi văn bản, không được đính kèm với phần tử có ID. Nếu không, nó sẽ dễ dàng.

Tôi đang cố gắng một cái gì đó như thế này:

$("*").each(function() { 
    $(this).html(this.html().replace('Original Text','New Text')); 
}); 

Không làm việc quá tốt.
Bất cứ ai gặp phải điều này trước đây?

Ngoài ra, nếu tôi có nhiều từ hoặc cụm từ để tìm và thay thế, điều đó ảnh hưởng đến tốc độ/sức mạnh xử lý của trình duyệt của người dùng như thế nào? Nó là một bộ nhớ hog?

Trả lời

6

Takpar, mã của bạn hoạt động quá. Dường như dừng lại một vài thứ khác khi làm việc, nhưng chỉ có những thứ tôi đang tự động kéo. Ví dụ: khi tôi đang sử dụng .ajax(). Không chắc tại sao, nhưng đó là lý do tại sao tôi gặp phải. Tôi sẽ kiểm tra thêm.

Trên một chủ đề liên quan, mã Gumbo của hoạt động:

$("*").each(function() { 
    if ($(this).children().length == 0) { 
     $(this).text($(this).text().replace('Subject:','Name:')); 
    } 
}); 

Điều duy nhất tôi đang chạy vào các vấn đề với được thay thế văn bản được nạp sau khi tải trang.

Tôi có một số hàm javascript đang hiển thị dữ liệu từ máy chủ nhưng chỉ sau khi trang đã tải tất cả các phần tử. Ví dụ: người dùng chọn giá trị từ trình đơn thả xuống để khởi tạo sự kiện để tải danh sách sản phẩm từ cơ sở dữ liệu.

tôi định dạng một số những sản phẩm như thế này:

Granny Smith Apples 
Price: x.xx per pound 
Nutritional facts.... 

tôi sẽ chỉ muốn tìm một thay thế từ "Giá cả:", và có thể thay thế nó với "Chi phí:".

Nhưng như tôi đã đề cập, dữ liệu đó chưa được tải.

Tôi có phải sống với giới hạn không?

+0

điều này hoạt động tốt trong các trình duyệt hiện đại tôi đã vượt qua điều này thông qua JS Lint và nó cho biết bạn đã bỏ lỡ một dấu bằng = ', vì vậy tôi đã thêm nó. Làm thế nào tôi có thể thực hiện điều này tương thích với IE8 -IE7? @coffeemonitor @jellybelly – breezy

1

Bạn muốn chọn bộ chọn :contains(). http://api.jquery.com/contains-selector/

$("*:contains('Original Text')").each(...); 
+0

Tất nhiên, cụ thể như bạn có thể là tốt nhất. –

+1

': contains' không phải là một ý tưởng hay:“ Văn bản phù hợp có thể xuất hiện trực tiếp trong phần tử đã chọn, * trong bất kỳ phần tử nào của phần tử đó, hoặc kết hợp của nó *. ” – Gumbo

+0

Chỉ đúng nếu bạn không muốn thay thế nó trong hậu duệ. –

20
$("*").contents().each(function() { 
    if(this.nodeType == 3) 
     this.nodeValue = this.nodeValue.replace("old", "new"); 
}); 
+1

+1 Đó là suy nghĩ tiếp theo của tôi. ;-) – Gumbo

4

tại sao bạn không chỉ cần sử dụng:

$('body').html($('body').html().replace('Original Text','New Text')); 
0
$("*").each(function() { 
if ($(this).children().length == 0){ 
    $(this).html($(this).html().replace(/Old String/g, "New String")); 
}}); 
Các vấn đề liên quan