2010-02-27 30 views
15

Tôi đã nhận được sự trợ giúp tuyệt vời từ người khác, liên quan đến việc tìm và thay thế văn bản bằng jquery.jQuery - Tìm và thay thế văn bản, sau khi nội dung được tải

Đoạn code dưới đây sẽ tìm thấy những từ: "Subject:" và thay thế bằng "Tên:"

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

Và điều này làm việc tuyệt vời.

Điều duy nhất tôi đang gặp phải sự cố là thay thế văn bản được tải sau khi tải trang.

tôi có một số chức năng javascript được hiển thị dữ liệu từ máy chủ, nhưng chỉ sau khi trang đã được nạp tất cả các yếu tố này. 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 Táo Giá: x.xx cho mỗi pound sự kiện dinh dưỡng ....

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

Nhưng như tôi đã đề cập, dữ liệu đó chưa được tải. Và chỉ hiển thị sau khi người dùng chọn "Granny Smith Táo" từ trình đơn thả xuống.

Đây có phải là giới hạn mà tôi phải sống không?

Trả lời

13

Bạn có thể thử gắn một sự kiện vào ajaxStop event cũng như trên tải:

function replaceText() { 
    var jthis = $(this); 
    $("*").each(function() { 
     if(jthis.children().length==0) { 
      jthis.text(jthis.text().replace('Subject:', 'Name:')); 
     } 
    }); 
} 
$(document).ready(replaceText); 
$("html").ajaxStop(replaceText); 
+0

Điều đó có hiệu quả! Ý tưởng hay và đơn giản như vậy. Cảm ơn bạn! – coffeemonitor

+2

Tại sao tạo nhiều đối tượng jq .... cache $ (this) refs thay vì – redsquare

+0

Tôi nên thêm đoạn mã này ở đâu? functions.php, tập tin chủ đề của tôi? Xin lỗi vì câu hỏi noobie. – Pete

1

Gọi chức năng của bạn từ $(document).ready() gọi lại như thế này

$(document).ready(function() { replace_stuff(); }); 
+0

Tôi đã làm điều đó và vẫn không ảnh hưởng đến dữ liệu được tải sau khi trang đã được tải. – coffeemonitor

0

Hàm dưới đây hoạt động hoàn hảo đối với tôi:

function replaceText(selector, text, newText, flags) { 
    var matcher = new RegExp(text, flags); 
    $(selector).each(function() { 
    var $this = $(this); 
    if (!$this.children().length) 
     $this.text($this.text().replace(matcher, newText)); 
    }); 
} 

Đây là ví dụ về cách sử dụng:

function replaceAllText() { 
    replaceText('*', 'Subject:', 'Name:', 'igm'); 
} 

$(document).ready(replaceAllText); 
$('html').ajaxStop(replaceAllText); 
Các vấn đề liên quan