Đó là gì khi một liên kết có dấu thăng “#” trong đó


93

Tôi đã kiểm tra một số trang web và chúng có dấu thăng (#) trong url. Nó làm gì?

 <a href="#" >Link name</a>

Câu trả lời:


105

Đó là một "mảnh" hoặc "mỏ neo được đặt tên". Bạn có thể sử dụng để liên kết đến một phần của tài liệu. Thông thường, khi bạn liên kết đến một trang, trình duyệt sẽ mở nó ở đầu trang. Nhưng bạn liên kết đến một phần ở nửa dưới, bạn có thể sử dụng phần đó để liên kết đến tiêu đề đó (hoặc bất cứ thứ gì).

Nếu không có <a name="whatever"/>thẻ nào trong trang, thì trình duyệt sẽ chỉ liên kết đến đầu trang. Nếu phân đoạn trống, thì nó cũng sẽ chỉ liên kết đến đầu trang.

Đối với một phân đoạn chỉ <a href="#">Link name</a> , thì đó chỉ là một liên kết đến đầu trang hiện tại .

Bạn thường thấy loại liên kết được sử dụng trong gợi ý với javascript. HTML tuân thủ các tiêu chuẩn yêu cầu một hrefthuộc tính, nhưng nếu bạn định xử lý yêu cầu bằng javascript thì "#" đóng vai trò là một trình giữ chỗ hợp lý.


1
+1 Mặc dù thuật ngữ chính thức là một đoạn URL, không phải là "tham chiếu băm": w3.org/TR/WD-html40-970708/htmlweb.html#h-4.1.1
Jason Hall

Vâng, tôi đã thay đổi nó thành "phân mảnh" trong câu trả lời của mình, vì đó là những gì hầu hết mọi người sử dụng. Tôi chưa bao giờ biết nó có tên "chính thức" :)
Dean Harding

2
Tại sao trình duyệt coi nó là 'chuyển đến đầu trang': Về mặt kỹ thuật, bạn đã thay đổi trang. Sau khi nhấp vào liên kết, bạn sẽ nhận thấy rằng # thực sự được thêm vào URL trong thanh địa chỉ và nếu bạn nhấp vào nút quay lại, nó sẽ xóa nó lần nữa. Tôi sẽ không nói đó là liên kết đến một phần của tài liệu, hơn nữa là liên kết đến một vị trí bên trong tài liệu. Nếu không, về cơ bản, cùng một thứ tôi đang gõ ...
animuson

URI kết thúc bằng # được phép theo cú pháp chung và có thể được coi là một loại phân đoạn trống. Trong các loại tài liệu MIME, chẳng hạn như văn bản / html hoặc bất kỳ loại XML nào, không cho phép các số nhận dạng trống để khớp với cấu trúc hợp pháp về mặt cú pháp này. Các trình duyệt web thường hiển thị phần trên cùng của tài liệu cho một đoạn trống. - en.wikipedia.org/wiki/Fragment_identifier
IcyBrk

Cũng bởi "Nếu không tuyên bố như vậy tồn tại, sau đó ngữ nghĩa của các đoạn được coi là chưa biết và có hiệu quả không bị giới hạn." Từ rfc3986 ( tools.ietf.org/html/rfc3986#page-24 )
IcyBrk

23

... chỉ để thêm một vài mẹo hữu ích.

Bạn có thể truy cập và thay đổi nó bằng document.location.hashJavaScript.

Nó có thể trỏ đến một mỏ neo được đặt tên (ví dụ <a name="top"></a>) hoặc đến một phần tử có id tương ứng (ví dụ <div id="top"></div>).

Tự nhìn thấy <a href="#" onclick="pop()">popup</a>một liên kết (ví dụ ) thường có nghĩa là một liên kết đang được sử dụng để chạy JavaScript riêng. Đây là một thực hành xấu.

Bất kỳ aphần tử nào cũng phải có hrefđiểm trỏ đến tài nguyên hợp lệ. Nếu một phần tử không tồn tại, hãy xem xét sử dụng một phần tử khác, chẳng hạn như button.


1
Đó là một điểm tốt về nó không phải là thực hành đặc biệt tốt ... nhưng chỉ vì nó không tốt không có nghĩa là bạn sẽ không thấy nó được sử dụng như vậy ở khắp nơi :)
Dean Harding

1
@alex, nếu đó là phương pháp không tốt, hãy cho chúng tôi biết phương pháp tốt sẽ được sử dụng để thay thế.
Ryan Lundy

@Kyralessa Nó đã ở ngay trong đoạn tiếp theo. Dù sao, tôi đã thực hiện một chỉnh sửa nên hy vọng nó rõ ràng hơn.
alex

2
@alex, có lẽ một lý do khiến mọi người sử dụng liên kết thay vì nút là họ muốn giao diện của liên kết. Làm thế nào về một liên kết đến một trang mô tả cách làm cho một nút trông giống như một liên kết? Ví dụ: kiểm tra nút HTML
Ryan Lundy

1
@alex, không hơn không kém khi nói rằng việc sử dụng # trên một liên kết là một phương pháp không tốt. Tất cả những gì OP hỏi là nó làm gì.
Ryan Lundy

11

# chỉ ra một liên kết đến một mỏ neo.

Tôi nghĩ tôi cũng sẽ đề cập đến điều gì đó khác:

Sử dụng '#' làm href cho một liên kết kích hoạt JavaScript là không tốt vì nó cuộn trang lên đầu - điều này có thể không phải là những gì bạn muốn. Thay vào đó, hãy sử dụng javascript:void(0).


+1 vì đã đề cập đến việc nhấp vào các liên kết này buộc trang phải cuộn lên đầu.
Chris Calo

4
Bạn không cần một mỏ neo nữa. Kể từ HTML5 (và có thể cả HTML 4), bất kỳ phần tử nào có thẻ <id> đều có thể được nhắm mục tiêu bởi một định danh phân đoạn. Xem tài liệu HTML5: whatwg.org/specs/web-apps/current-work/multipage/...
Basil Bourque

2
Không sử dụng javascript:void(0)cả hai - sử dụng buttonnếu nó không phải là một liên kết.
alex

10

Dấu thăng ( #) cho biết để xác định vị trí một mỏ neo trên trang. Ví dụ: nếu bạn bao gồm điều này ở đâu đó trên trang:

<a name="foo"></a>

hoặc gần đây hơn:

<div id="foo">*part of page*</div>

và sau đó bạn nhấp vào một liên kết trên trang có href #foo, nó sẽ điều hướng đến liên kết có tên hoặc divvới id foo.

Tuy nhiên, nếu bạn chỉ có href #, nó sẽ dẫn đến đầu trang.


2

Điều này liên kết trở lại chính trang đó. Nó thường được sử dụng với các liên kết thực sự chạy một số JavaScript.

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.