Mecha versi 2.6.3 sudah dirilis!

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.

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

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

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 ? :)

Komentar telah ditutup.