cuốn sách gpt4 ai đã làm

jQuery thay thế liên kết tương đối

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 20:37:39 25 4
mua khóa gpt4 Nike

Hy vọng ai đó có thể giải thích một số hành vi lạ mà tôi gặp phải khi sử dụng jQuery. Đoạn script sau tìm kiếm các liên kết tương đối trên trang của tôi và thay thế chúng bằng các liên kết tuyệt đối.

$(document).ready(function() {
$("a[href^='/']").each(function(){
var cur_href = $(this).prop("href");
$(this).prop("href", 'http://www.mysite.com'+cur_href);
});
});

Tôi đang sử dụng tập lệnh này trên một trang sẽ được phân phát qua https nhưng tôi không muốn tất cả điều hướng của mình liên kết đến trang https. Vì điều hướng của tôi được bao gồm trên toàn cầu nên đây có vẻ là cách dễ nhất để giải quyết vấn đề.

Vấn đề tôi gặp phải là với sự thay thế thực tế. Dòng thứ hai của tập lệnh khớp chính xác với tất cả các liên kết có liên quan trên trang và sau đó chạy phần thay thế của tập lệnh. Khi thay thế ở dòng 4, tôi nhận được một số kết quả lạ. Sau khi phần tập lệnh này chạy, URL của tôi sẽ trông như thế này:

http://www.mysite.comhttps//www.mysite.com/mypage.htm

Rõ ràng là tôi không làm được điều mình muốn. Phần đầu tiên của tập lệnh có vẻ khớp với URL tương đối, nhưng vào thời điểm phần thay thế kích hoạt, trình duyệt đã thêm thông tin tên miền.

Điều duy nhất tôi tìm thấy cho đến nay thực sự làm được điều tôi muốn là viết một bản thay thế dự đoán những gì trình duyệt thêm vào:

this.href = this.href.replace(/^https:\/\/www\.mysite\.com\//, "http://www.mysite.com/");

Có cách nào tốt hơn?


biên tập:đây là một jsfiddle của vấn đề .

câu trả lời hay nhất

jQuery không gây ra vấn đề gì ở đây. Vấn đề là ở HTMLAnchorElement href Thuộc tính (loại đối tượng được jQuery trả về),theo thông số kỹ thuật , luôn chứa URI tuyệt đối.

Trong HTML5 href Đúng một thuộc tính tổng hợpBạn có thể sửa đổihref.protocolHãy thoải mái trao đổi các giao thức (//phần trước), ví dụ:

var link = $( 'bar' )[0];
console.log( link.href );
// => https://example.com/foo

link.href.protocol = 'http:';
console.log( link.href );
// => http://example.com/foo

Vì không có hợp chất href Đối với các trình duyệt cũ hơn, bạn chỉ cần sử dụng biểu thức chính quy:

console.log( link.href );
// => https://example.com/foo

link.href = link.href.replace( /^https:/, 'http:' );
console.log( link.href );
// => http://example.com/foo

TLDR:Mã của bạn sẽ trông như thế này:

$( "a[href^='/']" ).prop( "href",
hàm(_idx, oldHref) {
return oldHref.replace( /^https:/, 'http:' );
}
);

P.S. Bạn sẽ nhận thấy tôi đã bỏ qua $.mỗi gọi. Điều này là do prop Vì Hành động được sử dụng để khớp mọi phần tử trong tập hợp, tức là nó đã thực hiện những gì bạn mỗi những việc đã làm.


.prop(propertyName, function(index, oldPropertyValue) )

  • tên tài sản Tên của thuộc tính cần đặt.
  • hàm (chỉ mục, oldPropertyValue) Hàm trả về giá trị cần đặt. Nhận vị trí chỉ mục của phần tử trong tập hợp và giá trị thuộc tính cũ làm đối số. cái này đề cập đến phần tử hiện tại.

Về javascript - jQuery thay thế các liên kết tương đối, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/9520730/

25 4 0
Taklimakan
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress