2012-02-06 31 views
13

https://github.com/maranomynet/linkifyKhi sử dụng plugin JQuery Linkify, làm cách nào để cắt bớt url?

Tôi đang sử dụng plugin này. Nó hoạt động, và mọi thứ đều ổn. Nhưng có một tùy chọn tôi có thể cắm vào nó để nếu chiều dài url dài hơn "X", sau đó cắt bớt nó và thêm "..."?

Hiện tại, các URL quá dài.

Tôi nhận thấy trong bản trình diễn có chức năng gọi lại "handleLinks", nhưng làm cách nào để sử dụng?

+0

Nếu bạn sẽ cắt liên kết thì nó sẽ vô ích như một liên kết nhưng nếu bạn muốn hiển thị nó như thế này thì bạn có thể triển khai một số plugin jQuery khác để thực hiện điều này. – NAVEED

Trả lời

9

Bạn nói đúng, bạn có thể sử dụng handleLinks chức năng gọi lại. Ví dụ: tôi đã viết chức năng đơn giản mà bạn cần:

handleLinks: function (links) { 
    for (var i = 0, cnt = links.length, tmpLink; i < cnt; i++) { 
     tmpLink = links[i].innerHTML; 
     if (tmpLink.length > 10) { 
      links[i].innerHTML = tmpLink.substr(0, 10) + '...'; 
     } 
    } 
} 

Nó cắt ngắn các liên kết nếu chúng dài hơn 10 ký tự. Bạn có thể sửa đổi kịch bản này theo nhu cầu của bạn.

+4

Nó có thể là không cần thiết, nhưng tôi sẽ bị cám dỗ để thêm 'liên kết [i] .title = tmpLink;' chỉ để chắc chắn rằng có một phương tiện mà người dùng có thể nhìn thấy URL đầy đủ (tôi biết nó hiển thị trong trạng thái thanh ở dưới cùng của màn hình, nhưng ngay cả như vậy ...). –

3

Để cắt xén URL, tôi chọn rút ngắn ở giữa, vì tên miền và tệp thường quan trọng hơn đường dẫn thư mục.

Chụp và điều chỉnh cho câu hỏi này từ GitHub fork của Thư viện JavaScript của Andrew Plummer Sugar.

String.prototype.shorten = function(length, position, countSplitter, splitter) { 
    if (this.length < 1 && length < 1) return String(this); 

    if (!(typeof(splitter) === 'string')) splitter = '...'; 
    if (!(typeof(countSplitter) === 'boolean')) countSplitter = true; 

    var balance = (countSplitter) ? splitter.length : 0; 

    if (length <= balance || this.length <= length) return String(this); 

    // Perform shortening 
    var shortened, beforeSplitter, afterSplitter; 

    if (position == 'left') { 
    afterSplitter = this.substring(this.length - length + balance, this.length - 1); 
    shortened = splitter + afterSplitter; 
    } else if (position == 'right') { 
    beforeSplitter = this.substring(0, length - balance); 
    shortened = beforeSplitter + splitter; 
    } else { 
    beforeSplitter = this.substring(0, Math.ceil((length/2) - (balance/2))); 
    afterSplitter = this.substring(this.length - Math.floor((length/2) - (balance/2)), this.length); 
    shortened = beforeSplitter + splitter + afterSplitter; 
    } 

    return shortened; 
} 

Ví dụ về rút ngắn một Url nên chuỗi kết quả là dài 20 ký tự:

var toShorten = 'http://stackoverflow.com/questions/9156458/when-using-jquery-linkify-plugin-how-do-i-truncate-the-url'; 
var shortened = toShorten.shorten(20); // Output: 'http://st...-the-url' 

Lưu ý: mã này chỉ có được bằng chứng đọc và không đơn vị được kiểm tra. Tuy nhiên, Sugar implementation đã được unit tested.

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