Ubah Semua Teks URL menjadi URL Aktif

Tabel Konten
  1. Pembaharuan 22 Februari 2013 
  2. Pembaharuan 25 Februari 2013 
    1. Contoh Penggunaan 
Uniform Resource Locator

Ubah semua karakter di dalam <body> yang cocok dengan pola teks URL menjadi tautan aktif:

// Detect links pattern
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
// Wrap the matched pattern with an anchor tag
$('body').html($('body').html().replace(exp, "<a href='$1'>$1</a>"));

Lihat Demo


Sumber: Darcy Clarke - Make Text URLs Active

Pembaharuan 22 Februari 2013 

Saya telah mengubah sedikit kode ini agar ketika pola exp cocok dengan URL yang merupakan tautan asli, ini tidak akan membuat tautan tersebut menjadi rusak seperti ini:

JavaScript Conflict
Bukan hanya teks saja yang terbungkus oleh elemen <a>, tetapi nilai atribut src dari URL asli juga ikut terbungkus.

Dibandingkan mengganti string yang cocok menjadi tautan, akan lebih baik jika kita mengubahnya menjadi elemen <span> terlebih dahulu. Kemudian, ketika semua string yang telah cocok terbungkus oleh elemen <span>, singkirkan semua tautan asli yang mungkin membungkus elemen ini. Terakhir, cukup ganti semua elemen <span> menjadi <a>:

// Detect links pattern
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;

// Wrap the matched strings with `<span class="fake-link"></span>`
$('body').html($('body').html().replace(exp, "<span class='fake-link'>$1</span>"));

$('.fake-link').each(function() {
    // Extra job: Check if parent is an anchor
    if ($(this).parent().is('a')) {
        // If `true`, then unwrap the original anchor which has been written by default from `.fake-link`
        $(this).unwrap();
    }
    // Replace `.fake-link` with an anchor tag
    $(this).replaceWith('<a href="' + $(this).text() + '">' + $(this).text() + '</a>');
});

Revisi Demo

Pembaharuan 25 Februari 2013 

Yang ini lebih aman:

// http://jmrware.com/articles/2010/linkifyurl/linkify.html
// Replacement => '$1$4$7$10$13<a href="$2$5$8$11$14">$2$5$8$11$14</a>$3$6$9$12'
var isUrl = /(\()((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\))|(\[)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\])|(\{)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(\})|(<|&(?:lt|#60|#x3c);)((?:ht|f)tps?:\/\/[a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]+)(>|&(?:gt|#62|#x3e);)|((?:^|[^=\s'"\]])\s*['"]?|[^=\s]\s+)(\b(?:ht|f)tps?:\/\/[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]+(?:(?!&(?:gt|#0*62|#x0*3e);|&(?:amp|apos|quot|#0*3[49]|#x0*2[27]);[.!&',:?;]?(?:[^a-z0-9\-._~!$&'()*+,;=:\/?#[\]@%]|$))&[a-z0-9\-._~!$'()*+,;=:\/?#[\]@%]*)*[a-z0-9\-_~$()*+=\/#[\]@%])/img;

Contoh Penggunaan 

Karakter pengganti adalah berupa $1$4$7$10$13<a href="$2$5$8$11$14">$2$5$8$11$14</a>$3$6$9$12:

var txt = document.getElementById('text');
txt.innerHTML = txt.innerHTML.replace(isUrl, '$1$4$7$10$13<a href="$2$5$8$11$14">$2$5$8$11$14</a>$3$6$9$12');

Lihat Demo

16 Komentar

  • Beben Koben

    hihihi ternyata master hompimpa Taufiq Nurrohman tuh yah :D

  • Yopi Hasopa

    kelemahannya apa gan kalo pake cara ini? mohon diperjelas lagi :)
    terima kasih.

  • Taufik Nurrohman

    @Yopi Hasopa Kelemahannya, kalau JavaScript didisable link tidak akan menjadi aktif. Apapun bentuknya, dimanapun tempatnya, cara manual masih akan tetap menjadi cara terbaik karena kitalah yang mengendalikan segala sesuatu, bukan komputer. Ini sebagai alternatif saja. Misalnya, jika kita berada di dalam sebuah forum, mungkin tangan kita akan capek jika harus menulis link dengan kode HTML. Dengan cara ini, kita tidak perlu mengetik tag <a>. Cukup ketik URLnya saja nanti saat diterbitkan akan berubah menjadi URL aktif. Selengkapnya bisa mempelajari dari link sumbernya, atau dari halaman demo.

  • Yopi Hasopa

    @Taufik Nurrohman terima kasih gan pencerahannya, sangat membantu :)

  • Aldy

    bang gimana klo bikin link kyk yg di facebook, klo di klik linknya berubah jadi gini contohnya http://www.facebook.com/l.php?u=http%3A%2F%2Fyoutu.be%2FuF56D6jg240&h=PAQHeFJCoAQH4C1UkvWdM_mRUeWvabYwN52PzVeX3oPFEgQ

  • Taufik Nurrohman

    @Sadeva Aldy Pratama Kurang tahu sih. Itu sistem redirect dari Facebook pribadi. Jadi tidak bisa dibuat menggunakan JavaScript.

  • Aldy

    @Taufik Nurrohman saya ingin ngubah semua link di blog saya jadi seperti ini http://alprablog.blogspot.com/p/iframe.html?iframe=hompimpaalaihumgambreng.blogspot.com
    bsa ga mas?

  • Taufik Nurrohman

    @Sadeva Aldy Pratama Bisa. Pakai saja .replace() untuk mengganti setiap akhir URL dengan ?iframe=hompimpaalaihumgambreng.blogspot.com
    Demo: http://jsfiddle.net/tovic/9Dhdk/

    $('a').each(function() {
    $(this).attr('href', $(this).attr('href').replace(/$/g, "?iframe=hompimpaalaihumgambreng.blogspot.com"));
    });

    Ngomong-ngomong, buat apa ya? Hehe... :p

  • Aldy

    @Taufik Nurrohman buat sya sndri bang, hehe
    1 lg, ini pke jquery tambahan ga? maklum saya bari kenal dgn blog ini :D

  • Taufik Nurrohman

    @Sadeva Aldy Pratama Nggak perlu. Sekali saja sudah masang satu JQuery itu untuk selamanya.

  • Aldy

    @Taufik Nurrohman jquerynya yg mana mas?

  • Unknown

    klw kebalikannya gimana mas, kaya kolom komentar di blog ini "Link hidup dalam komentar akan terhapus secara otomatis" :D

  • Kang Rian

    bermanfaat sekali untuk saya yang baru ada keinginan belajar jquery , walau memusingkan tapi mengasyikan bila tutorial nya seperti ini .. sangat membantu , terima kasih kang taufik ..

  • Bardil

    =p* kalau mengubah link menjadi html di belakangnya gimana bang ? :)

  • Menthor Kita

    good

Komentar telah ditutup.