Liên kết để tải lại trang hiện tại


175

Có thể có một liên kết bình thường chỉ đến vị trí hiện tại?

Tôi hiện đã tìm thấy 2 giải pháp, nhưng một trong số chúng bao gồm JavaScript và trong số đó, bạn phải biết đường dẫn tuyệt đối đến trang:

<a href="#" onclick="window.location.reload(true);">1</a>
<a href="/foobar/">2</a>
<a href="#">3 (of course not working)</a>

Có cách nào để làm điều này, mà không cần sử dụng JavaScript hoặc biết đường dẫn tuyệt đối không?

Câu trả lời:


198

Tôi đã từng sử dụng:

<a href=".">link</a>

Vẫn chưa tìm thấy một trường hợp và / hoặc trình duyệt mà nó không hoạt động như dự định.

Thời kỳ có nghĩa là con đường hiện tại. Bạn cũng có thể sử dụng ..để tham khảo thư mục phía trên đường dẫn hiện tại, ví dụ, nếu bạn có cấu trúc tệp này:

page1.html
folder1
    page2.html

Sau đó bạn có thể page2.htmlviết:

<a href="../page1.html">link to page 1</a>

BIÊN TẬP:

Tôi không chắc liệu hành vi đã thay đổi hay nếu nó luôn như vậy, nhưng Chrome (và có thể những người khác) sẽ coi các khoảng thời gian như được mô tả ở trên như liên quan đến các thư mục , không phải các tệp. Điều này có nghĩa là nếu bạn đang ở http://example.com/foo/bar.htmltrong thư mục của bạn /foo/hrefgiá trị .trong bar.htmlsẽ đề cập đến /foo/chứ không phải làbar.html

Hãy nghĩ về nó như điều hướng hệ thống tập tin trong một thiết bị đầu cuối; bạn không bao giờ có thể cdvào một tập tin :)

EDIT 2:

Có vẻ như hành vi sử dụng href="."không còn như dự đoán nữa, cả Firefox và Chrome có thể đã thay đổi cách họ xử lý những điều này. Tôi sẽ không hoàn toàn dựa vào câu trả lời ban đầu của mình mà thay vào đó hãy thử cả chuỗi trống và khoảng thời gian trong các trình duyệt khác nhau để sử dụng cụ thể và đảm bảo bạn có được hành vi mong muốn.


25
Cần lưu ý mặc dù dữ liệu GET không được bảo tồn bằng phương pháp này, hãy coi đó là "tải lại cứng". Sử dụng giá trị trống href sẽ bảo toàn dữ liệu GET, nhưng xóa giá trị băm (như #these). Sử dụng # hay? giá trị as href sẽ thêm "rác" vào URL mới. Tôi đã thấy rằng sử dụng thời gian là cách sạch nhất để đạt được tải lại.
Markus Amalthea Magnuson

5
Kỹ thuật này không hoạt động với tôi trên mac chrome. Mặc dù sử dụng "." như anhor, nó hoạt động như thể ".." và liên kết đến trang mẹ. ví dụ / admin / thứ trở thành / admin. Bất cứ ai khác nhìn thấy hành vi này?
Zac

3
Giải pháp này là sai. Ngoài ra, trong Chrome không hoạt động và trỏ đến thư mục mẹ. Bạn nên sử dụng blank href như đề xuất
@MarkusAmaltheaMagnuson

8
Điều này dường như chỉ hoạt động nếu thành phần đường dẫn của URL kết thúc bằng a /.
Kos

6
Cho đến hôm nay, điều này không hoạt động trong Firefox hoặc Chrome. Cả hai trình duyệt đều tham chiếu thư mục mẹ (không phải trang hiện tại) bằng href = "."
jtubre

135

Không có câu trả lời nào khác sẽ đoán trước bất kỳ giá trị chuỗi truy vấn nào. Thử

<a href="javascript:window.location.href=window.location.href">

Phải thừa nhận rằng điều này liên quan đến javascript nhưng, trừ khi người dùng của bạn bị vô hiệu hóa tập lệnh, điều này khá đơn giản.


5
Không hoạt động đối với tôi (Google Chrome 32). Tôi thích <a href="javascript:location.reload();"> </a>
Gabriel

3
Tôi đang sử dụng Google Chrome 36.0.1985 và javascript: window.location.href = window.location.href không hoạt động. location.reload () có tác dụng đáng tiếc khi nhắc người dùng nếu họ muốn làm mới trang trong Firefox và, tùy theo kịch bản, có thể không cung cấp kết quả mong muốn. Xem stackoverflow.com/questions/2405117/ trên để biết thêm thảo luận.
Simon Molloy

1
Tôi đang sử dụng góc với định tuyến. Điều này đã không làm việc cho tôi. Tuy nhiên, điều này không hoạt động -> <a href="javascript:"> click me </a>
John Henckel

Nếu js bị vô hiệu hóa thì sao?

5
Giải pháp này không bảo tồn neo
thomas.winckell 7/2/2017

77

Một cách sử dụng javascript:

<a href="javascript:window.location.reload(true)">Reload</a>

4
Bảo toàn truy vấn và neo ( ?query=string#anchor). Tuyệt quá!
analog-nico

Tôi đã kết thúc bằng cách sử dụng câu trả lời này vì vị trí cuộn cũng được giữ lại. Hữu ích nếu bạn đang sử dụng tải lại dưới dạng nút "hoàn tác" giả.
igneizard

Công việc này được giải quyết trên máy khách React
Andrius

bạn có thể giải thích cách sử dụng cú pháp html này không?
Joanna Mikalai

Tôi có một câu hỏi, là truetham số thực sự là những gì bạn nên đi với vấn đề này khi sử dụng window.location.reloadphương pháp? Điều đó sẽ làm cho nó được làm mới một cách khó khăn để tránh bị kéo khỏi bộ đệm, có thể là điều bạn muốn trong một số trường hợp, nhưng tôi nghĩ trong hầu hết các tình huống bạn muốn tận dụng bộ đệm, phải không?
Stephen M Irving

31

Bạn có thể làm điều này: <a href="">This page</a>

nhưng tôi không nghĩ rằng nó bảo tồn dữ liệu GET và POST.


3
Thật không may, nó không hoạt động trong IE. Từ: msdn.microsoft.com/en-us/l Library / cc848861% 28v = vs85% 29.aspx - Nếu HREF được chỉ định làm giá trị trống (href = "" or href =), việc thực hiện liên kết có thể hiển thị thư mục chứa tài liệu hiện tại hoặc có thể tạo ra lỗi, tùy thuộc vào các thành phần khác trong tài liệu và môi trường máy chủ.
Bohdan Lyzanets

12
<a href="<?php echo $_SERVER["REQUEST_URI"]; ?>">Click me</a>

12
Tôi không sử dụng PHP.
Tyilo

3
Thông báo -1, có thể không phải là giải pháp trong trường hợp của bạn (vì đây là giải pháp php) nhưng tôi nghĩ đó là giải pháp sạch nhất ở đây. Điều này bởi vì nó cung cấp một giá trị hợp lệ cho thuộc tính href, nó là sạch nhất. Nếu có thể hãy tránh javascript. Vậy +1.
rofavadeka

ty rất hữu ích. Tại sao điều này nhận được ngón tay cái xuống? Câu hỏi ban đầu không đề cập đến js và hầu hết các tài liệu tham khảo ở đây của JS ...
Andrew

@Andrew câu hỏi ban đầu được gắn thẻ #html và #hyperlink. Mặc dù thừa nhận "một liên kết bình thường chỉ đến vị trí hiện tại" là một mô tả cực kỳ mơ hồ, tôi khá chắc chắn rằng nó có thể được hiểu một cách hợp lý là tìm kiếm một giải pháp chỉ dành cho khách hàng. Một mỏ neo trong đó href được cư trú bởi PHP không phải là "liên kết thông thường" bởi bất kỳ đoạn nào, đó là mã PHP.
đặc hữu

@endemia Để đề xuất javascript là "bình thường" và php không phải là một ý kiến ​​vô nghĩa. OP thực sự định nghĩa bình thường là không bao gồm javascript và không sử dụng đường dẫn tuyệt đối. Điều thú vị là hầu hết các câu trả lời đều có trong javascript.
Andrew

10

sử dụng điều này để tải lại / làm mới trang hiện tại

<a href="#" onclick="window.location.reload(true);">

hoặc dùng

<a href="">refresh</a>

9
<a href=".">refresh current page</a>

hoặc nếu bạn muốn truyền tham số:

<a href=".?curreny='usd'">refresh current page</a>

7

<a href="https://stackoverflow.com/">Clicking me refreshes the page</a>

<a href="?">Click Me To Reload the page</a>


3
điều này chỉ hoạt động nếu bạn đang sử dụng index.html hoặc tài liệu / url gốc khác
Stephen

@ Tất nhiên rồi. Bạn khá đúng. Rõ ràng tôi đang rỉ sét hơn tôi nghĩ. Tôi chỉ thử nghiệm nó rất nhanh và tình cờ được root.
Thomas Shields

Hoạt động rất tốt khi url là ví dụ. / blablabla trong khi. sẽ đưa tôi trở lại root.
Augustin Riedinger

6

Thật không có cách toàn cầu để làm điều này thật đáng tiếc chỉ với HTML. Bạn có thể thử làm <a href="">test</a>tuy nhiên nó chỉ hoạt động trong một số trình duyệt.


Nó không hoạt động trong IE. Từ: msdn.microsoft.com/en-us/l Library / cc848861% 28v = vs85% 29.aspx - Nếu HREF được chỉ định làm giá trị trống (href = "" or href =), việc thực hiện liên kết có thể hiển thị thư mục chứa tài liệu hiện tại hoặc có thể tạo ra lỗi, tùy thuộc vào các thành phần khác trong tài liệu và môi trường máy chủ.
Bohdan Lyzanets

1
Tôi đã thử nghiệm và nó hoạt động trong tất cả các trình duyệt hiện đại chính (Chrome, Firefox, Edge, Opera, Safari)
Donald Duck

5

Url hoàn toàn idempotent bảo tồn đường dẫn, tham số và neo.

 <a href="javascript:"> click me </a>

nó chỉ sử dụng một chút nhỏ của JS.

EDIT: điều này không tải lại trang. Nó là một liên kết không có gì.


@FranciscoCorralesMorales, Xin lỗi nhưng tôi nghĩ tôi đã hiểu nhầm câu hỏi. Tôi nghĩ rằng OP đang cố gắng tạo ra một liên kết không có gì. Nhưng bây giờ tôi thấy rằng OP muốn một liên kết sẽ tải lại trang hiện tại. (Tôi sẽ chỉnh sửa).
John Henckel

Cảm ơn bạn vì đoạn mã này, có thể cung cấp một số trợ giúp ngay lập tức. Một lời giải thích phù hợp sẽ cải thiện đáng kể giá trị giáo dục của nó bằng cách chỉ ra lý do tại sao đây là một giải pháp tốt cho vấn đề và sẽ giúp nó hữu ích hơn cho những độc giả tương lai với những câu hỏi tương tự, nhưng không giống nhau. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những hạn chế và giả định được áp dụng.
Toby Speight


2

Mặc dù câu trả lời được chấp nhận không hoạt động với tôi trong IE9, nhưng điều này đã làm:

<a href="?">link</a>

1
Tôi không nghĩ rằng nó sẽ hoạt động nếu bạn quan tâm đến việc giữ các tham số chuỗi truy vấn.
WynandB

1
@WynandB là chính xác. điều này sẽ bỏ qua tất cả các tham số GET và POST. nếu đó là những gì bạn muốn, hoặc nếu bạn không quan tâm, thì mẹo này hoạt động rất tốt.
hanshenrik

2

Thêm một giải pháp

<a href="javascript:history.go(0)">Reload</a>

Giải pháp tốt! Một mẹo nhỏ cho phương thức đó là 0 là tham số mặc định, vì vậy nếu bạn đang cố tải lại, bạn chỉ có thể viết: history.go()không có đối số.
Stephen M Irving

2
<a href="">Refresh!</a>

Để href=""trống và nó sẽ làm mới trang.
Cũng hoạt động nếu một số thông tin được thông qua bằng cách sử dụng các hình thức.


0

Tôi sử dụng JS để chỉ hiển thị div với một id cụ thể trong trang thẻ trong trang web jekyll. Với một tập hợp các liên kết trong cùng một trang, bạn hiển thị phần tử tương ứng:

function hide_others() {
    $('div.item').hide();
    selected = location.hash.slice(1);
    if (selected) {
        $('#' + selected).show();
    }
    else {
    $('div.item').show();
    }
}

liên kết sử dụng các liên kết như:

<a href="javascript:window.location.href='/tags.html#{{ tag[0] }}-ref'; hide_others()">{{ tag[0] }}</a>

0

Bạn có thể sử dụng một biểu mẫu để thực hiện POST cho cùng một URL.

 <form  method="POST" name="refresh" id="refresh">
 <input type="submit" value="Refresh" />
 </form>

Điều này cung cấp cho bạn một nút làm mới trang hiện tại. Có một chút khó chịu vì nếu người dùng nhấn nút làm mới trình duyệt, họ sẽ nhận được một do you want to resubmit the formtin nhắn.


0

TÔI SỬ DỤNG HTML ĐỂ GIẢI QUYẾT VẤN ĐỀ NÀY
Sử dụng:

<a href="page1.html"> Link </a>

* page1.html -> nhập tên của tệp bạn đang làm việc (tệp HTML hiện tại của bạn)


Vui lòng chỉnh sửa bài viết. Không rõ ngôn ngữ lập trình nào bạn đang sử dụng, bạn đã cố gắng triển khai mã như thế nào.
Roee Anuar

Tôi đã sử dụng HTML để thực hiện nhiệm vụ này.
Ayush Kumar

-1
<a href="/">Same domain, just like refresh</a>

Có vẻ chỉ hoạt động nếu trang web của bạn là index.html, index.htm hoặc index.php (bất kỳ trang mặc định nào).

Nhưng dường như đó .là điều tương tự và được chấp nhận nhiều hơn

<a href=".">Same domain, just like refresh, (more used)</a>

Cả hai đều hoạt động hoàn hảo trên Chrome khi tên miền là cả http://https://


-2

<a href="https://stackoverflow.com/home" target="_self">Reload the page</a>


Vấn đề là nếu chúng ta không biết url ... target = "_ self" có thể bị hủy bỏ
Hafenkranich

-3

Nếu bạn đang sử dụng các mẫu php / smarty, bạn có thể làm một cái gì đó như thế này:

<a href="{{$smarty.server.REQUEST_URI}}{if $smarty.server.REQUEST_URI|strstr:"?"}&{else}?{/if}newItem=1">Add New Item</a>

-4

Chỉ cần thêm target = "_ blank" và liên kết sẽ mở một trang mới giữ trang gốc.


Như bạn nói, điều này sẽ chỉ mở bất cứ trang nào được chỉ định trong hrefthuộc tính trong một cửa sổ / tab mới. Điều này không theo bất kỳ cách nào trả lời câu hỏi thực tế.
Philip Stratford
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.