2009-04-17 31 views
19

Thứ nhất, có cách nào để sử dụng document.write() bên trong phương thức $ (document) .ready() của JQuery không? Nếu có, xin vui lòng đầu mối cho tôi bởi vì điều đó sẽ giải quyết vấn đề của tôi.

Nếu không, tôi có mã của ai đó mà tôi phải làm việc với tôi. Điều bắt được là tôi không được phép thay đổi mã của anh ta theo bất kỳ cách nào. Phần mà không hoạt động trông giống như sau:

document.write('<script src=\"http://myurl.com/page.aspx?id=1\"></script>'); 

Thẻ kịch bản là tham khảo một trang aspx mà không một loạt các bài kiểm tra và sau đó khạc nhổ ra một cái gì đó giống như vậy:

document.write('<img src=\"/image/1.jpg\" alt=\"Second image for id 1\">') 

Các kịch bản chỉ là những ví dụ về những gì đang thực sự xảy ra. Vấn đề ở đây là tôi đã có một document.write() trong kịch bản lệnh ban đầu và một document.write() trong kịch bản lệnh được thêm vào kịch bản lệnh đầu tiên và tôi phải thực hiện công việc này trong $ JQuery (tài liệu) .ready() chức năng, mà không thay đổi mã của mình.

Tôi không biết phải làm gì. Cứu giúp?

Trả lời

41

Với các yêu cầu được cung cấp, không, bạn không thể sử dụng document.write mà không thực sự sắp xếp tài liệu. Nếu bạn thực sự uốn cong trên không thay đổi mã, bạn có thể ghi đè lên các chức năng của document.write() như vậy và tack vào kết quả sau:

var phbRequirement = ""; 

$(function() { 
    document.write = function(evil) { 
    phbRequirement += evil; 
    } 
    document.write("Haha, you can't change my code!"); 
    $('body').append(phbRequirement); 

}); 

Hãy chắc chắn rằng bạn ghi đè lên các chức năng document.write trước khi nó Được sử dụng. Bạn có thể làm điều đó bất cứ lúc nào.

Các câu trả lời khác là nhàm chán, điều này thật thú vị, nhưng rất nhiều khi thực hiện nó theo cách sai trái để thực hiện các yêu cầu đã cho.

+0

Với một chút tinh chỉnh, tôi đã có thể sử dụng phương pháp này để giải quyết vấn đề của mình! Cảm ơn nhiều. Bạn đã khiến tôi lãng phí rất nhiều thời gian cho việc này! – Kappers

3

jQuery đã sẵn sàng thay thế cho document.write. Tất cả những gì bạn cần sử dụng là phương thức nối thêm.

jQuery('<img src=""/>').appendTo('body'); 

Điều này khá hiển nhiên. Nhưng một thời gian ngắn, bạn có thể thay thế bằng bất kỳ html nào bạn muốn. Và tên thẻ trong phương thức appendTo là tên của thẻ bạn muốn nối thêm html vào. Đó là nó.

3

câu trả lời Picardo của công trình, nhưng đây là trực quan hơn cho tôi:

$("body").append('<img src=\"/image/1.jpg\" alt=\"Second image for id 1\">'); 

Ngoài ra, đối với phần kịch bản đang được chèn với document.write(), hãy kiểm tra jQuery's getScript() function

6

Picardo có cách tiếp cận tôi đã sử dụng. Mở rộng trên khái niệm, hãy đọc:

$('<script/>') 
    .attr('src', 'http://myurl.com/page.aspx?id=1') 
    .appendTo('body'); 

phong cách khác:

var imgnode = $('<img alt="Second image for id 1"/>') 
    .attr('src', "image1.jpg"); 

$('#id1').append(imgnode); 

Hãy chắc chắn để sử dụng phương pháp attr để đặt bất kỳ thuộc tính năng động. Không cần phải thoát khỏi những biểu tượng đặc biệt theo cách đó.

Ngoài ra, tôi không chắc chắn về hiệu quả của việc tạo thẻ tập lệnh động; Tôi chưa bao giờ thử nó. Mặc dù, dự kiến ​​chúng chứa hoặc tham chiếu tập lệnh phía máy khách. Giả định của tôi là những gì page.aspx sẽ trở lại. Câu hỏi của bạn hơi mơ hồ về những gì bạn đang cố gắng làm ở đó.

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