2010-06-21 32 views
14

Tôi có một số mã jQuery có trên mọi trang web của trang web (trong phần tử đầu).Làm cách nào để yêu cầu jQuery chỉ chạy một chức năng trên một trang web cụ thể?

Tôi có thể sử dụng cú pháp chọn nào để nói với jQuery rằng một chức năng nhất định chỉ được chạy trên một trang chứ không phải tất cả các trang khác trên trang web?

Tôi có thể chỉ định tên trang hoặc URL trong bộ chọn bằng cách nào đó không?

Rất cám ơn

+0

không có bất kỳ ID hoặc lớp nhận dạng nào (hoặc thậm chí cả tên) trong mã trang trên trang web này. nhưng với ý tưởng của bạn .. nó là ngu ngốc-dễ dàng .. kiểm tra có điều kiện cho pathname và sau đó chỉ cần làm điều đó .. Cảm ơn, dudes .. – Joseph

Trả lời

23

Bạn có thể sử dụng câu lệnh if để kiểm tra top.location.pathname.

if (top.location.pathname === '/my/path') 
{ 
    /* magic ... */ 
} 

Hoặc nếu bạn muốn làm cho nó dễ di chuyển hơn và đưa ra câu lệnh if (nếu ai đó đọc nó sẽ biết) - nếu bạn có quyền truy cập phần tử của tài liệu, bạn có thể thêm một lớp cho thấy bạn muốn chạy tập lệnh này.

Vì vậy, ví dụ, nếu /* magic ... */ trong ví dụ trên có cái gì để làm với bao gồm các API Facebook, bạn có thể làm cho cơ thể của bạn trông như <body class="has-facebook-api"> và sau đó làm một tấm séc với jQuery:

$(function() // on document.ready() 
{ 
    if ($('body.has-facebook-api').length > 0) 
    { 
     /* magic ... */ 
    } 
}); 

Hãy chắc chắn này chạy sau khi bao gồm jQuery bên trong một thẻ tập lệnh riêng biệt.


Trong khi chúng tôi đang ở đó, nếu bạn không sử dụng kịch bản này để chuyển đổi hình ảnh của trang web của bạn trước khi nó được xuất ra, tôi muốn khuyên bạn nên đặt tất cả hoặc hầu hết các thẻ script của bạn gần chân trang của bạn để hiển thị trang sớm hơn.

+3

Tôi sẽ khuyên bạn nên thêm một lớp hoặc id vào thẻ cơ thể và đi từ đó. Bằng cách này, ngay cả khi bạn di chuyển trang web hoặc cấu trúc tệp của mình, nó vẫn sẽ hoạt động. –

+1

Tôi không có quyền truy cập vào bất cứ điều gì, nhưng một yếu tố đầu toàn cầu cho css/js .. vì vậy những gì tôi thêm là như nhau trên mỗi trang .. do đó cần phải cảm nhận những gì trang được nhắm mục tiêu .. nhưng tôi nghĩ rằng có một giải pháp rình rập trong tất cả những ý tưởng tuyệt vời .. thanx nhiều – Joseph

1

Có thể kiểm tra window.location.pathname?

if (window.location.pathname == "/path/to/page.html") { 
    callFunction(); 
} 
0

Bạn không thể chỉ định URL hiện tại trong một jQuery Selector, bạn tuy nhiên có thể viết một tấm séc đơn giản bằng cách sử dụng đối tượng document.location:

if (document.location.pathname == "/somefolder/somepage") { 
    // do some special stuff on this page! 
} 
0

Tôi thích làm những thứ như thế này trong bất cứ ngôn ngữ bạn đang viết của bạn ứng dụng trong. bố trí của bạn/template/bất cứ điều gì mà được phục vụ tối đa html của bạn có thể chỉ đơn giản là ra một đúng/sai một javascript biến

if ($page = '/foo/bar.html/') { 
    echo 'baz = true'; 
} else { 
    echo 'baz = false'; 
} 

Sau đó có js séc baz của bạn để xác định xem bạn nên chạy các chức năng này hay không . Bạn không dựa vào 100% trên js trong trường hợp này, nhưng imo đó là tốt hơn. Máy chủ của bạn sẽ luôn biết trang/url bạn đang sử dụng là gì và bạn sẽ không cần phải lo lắng về sự không tương thích của trình duyệt với các js của bạn đang cố gắng xác định trang nào đang nằm trên đó.

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