Tip: Mengubah Semua Teks di dalam Tag CODE menjadi Tautan Pencarian
Jika Anda terbiasa menyisipkan elemen <code>
di dalam posting tutorial Anda, jangan sia-siakan kebiasaan rajin dan disiplin tersebut menjadi sesuatu yang tidak memberikan arti khusus. Akan sangat memberikan informasi yang lebih besar jika Anda mengubah semua elemen tersebut menjadi link aktif. Dalam hal ini, kita akan membuat setiap teks yang berada di dalam tag <code>
menjadi kata kunci untuk halaman hasil penelusuran dalam situs Anda. Pada intinya konsep ini masih tidak begitu jauh dari konsep Memanfaatkan jQuery untuk Mengizinkan Elemen Terlarang Masuk ke dalam Kometar Blogger. Hanya saja di sini kita harus memahami satu hal penting, yaitu format URL penelusuran di blog Anda:
Blogspot memiliki bentuk URL pencarian seperti ini:
http://www.namablog.com/search/?q=Kata Kunci
Wordpress biasanya memiliki format URL pencarian yang berbeda seperti ini:
http://www.namablog.com/?s=Kata Kunci&submit=Search
Tampilan-tampilan URL seperti itu bisa Anda temukan saat Anda mengetik kata kunci pada kotak pencarian blog, kemudian menekan tombol Submit atau Enter pada keyboard:
Oke, kita akan menggunakan format standar URL penelusuran tersebut sebagai bahan nilai atribut href
pada elemen <a>
yang akan kita sisipkan menggunakan JavaScript setelah ini.
Mengubah Teks di dalam Tag <code> menjadi Link Aktif
Caranya sederhana, kita hanya memerlukan kombinasi fungsi .replaceWith()
, .html()
dan .text()
untuk mengitari elemen <code>
dengan elemen <a>
yang mengandung nilai href
berupa URL pencarian yang mengandung kata kunci teks yang berada di dalam tag <code>
secara otomatis. (Tulisan yang cukup panjang).
Pada intinya inilah yang kita inginkan. Kita ingin mengubah kumpulan teks ini:
Lorem ipsum dolor sit <code>amet</code> jabang bayi
oek-oek consectetur <code>kampuang</code> nan jauh dimato
ambo-ambo tempe goreng enak rasanya.
Menjadi seperti ini:
Lorem ipsum dolor sit <a href="//namablog.blogspot.com/search/?q=amet"><code>amet</code></a> jabang bayi
oek-oek consectetur <a href="//namablog.blogspot.com/search/?q=kampuang"><code>kampuang</code></a> nan jauh dimato
ambo-ambo tempe goreng enak rasanya.
Dan dengan metode yang sama persis dengan ini, kita akan mengubah semua teks di dalam elemen <code>
menjadi link aktif:
$('div.post-body').children('code').each(function() {
$(this).replaceWith(function() {
return $('<a href="/search/?q=' + $(this).text() + '"><code>' + $(this).html() + '</code></a>');
});
});
Kode di atas akan mengubah semua elemen <code>abc</code>
yang merupakan anak level pertama dari elemen div.post-body
menjadi <a href='/search/?q=abc'><code>abc</code></a>
Mengapa harus anak pertama? Oke, Anda bisa saja menuliskan kodenya seperti ini:
$('div.post-body code').each(function() {
$(this).replaceWith(function() {
return $('<a href="/search/?q=' + $(this).text() + '"><code>' + $(this).html() + '</code></a>');
});
});
Tapi terkadang, selain menuliskan teks di dalam <code>
, mungkin Anda juga suka/harus menulis teks di dalam tag <pre><code> ... </code></pre>
. Jika kita tidak menargetkan elemen <code>
yang merupakan anak level pertama saja, maka kemungkinan besar kita akan mengalami masalah seperti ini:
Itulah sebabnya mengapa di sini Saya menggunakan fungsi .children()
yang hanya akan mencari anak elemen level pertama saja, sehingga elemen <code>
yang berada di dalam elemen <pre>
tidak akan ikut menjadi tautan karena elemen <code>
yang berada di dalam elemen <pre>
merupakan anak pertama dari <pre>
namun akan menjadi anak ke dua dari <div class='post-body'>
.
Atau bisa juga menggunakan metode selektor CSS3 seperti ini:
$('div.post-body > code').each(function() {
...
});
Untuk situs tutorial Wordpress bisa menggunakan konsep ini:
$('div.entry-content').children('code').each(function() {
$(this).replaceWith(function() {
return $('<a href="/?s=' + $(this).text() + '&submit=Search"><code>' + $(this).html() + '</code></a>');
});
});
Pembaharuan: 16 Juli 2012Lebih efisien menggunakan jQuery .wrapInner()
:
$('div.entry-content').children('code').each(function() {
$(this).wrapInner('<a href="/?s=' + encodeURIComponent($(this).text()) + '&submit=Search"></a>');
});
Tapi Saya rasa Wordpress tidak memerlukan ini karena mereka bisa melakukan itu dengan PHP. Untuk melihat hasilnya, di sini Saya sudah membuat ilustrasi sederhana menggunakan JSFiddle. Coba Anda klik salah satu teks berupa kode di posting tersebut maka Anda akan langsung diarahkan ke halaman hasil penelusuran posting yang terkait dengan kata kunci itu. Seperti halnya Wikipedia (kurang lebihnya begitu).
Pembaharuan
Saat kita menggunakan tanda petik yang tidak terduga di dalam tag <code>
, hal-hal aneh semacam ini seringkali akan terjadi:
Itu adalah konflik tanda petik. Jika kita menerapkan satu tipe tanda petik yang sama (petik ganda/petik tunggal) sebagai karakter dan juga sebagai penanda string dalam JavaScript, maka itulah yang akan terjadi. Masalahnya ada di sini, saat JavaScript telah selesai memanipulasi elemen <code>
:
<a href="/search/?q=<div id="mama">"><code><div id="mama"></code></a>
dan ini adalah apa yang seharusnya terjadi:
<a href="/search/?q=<div id='mama'>"><code><div id="mama"></code></a>
Cara paling sederhana untuk mengatasi konflik tersebut adalah dengan menerapkan method Cara paling sederhana untuk mengatasi konflik tersebut adalah dengan memparse konten menjadi karakter URI:.replace()
tambahan untuk memastikan bahwa tidak ada tanda petik ganda di dalam atribut href
yang bertanda petik ganda
$('div.post-body').children('code').each(function() {
$(this).replaceWith(function() {
return $('<a href="/search/?q=' + $(this).text().replace(/\"/g, "'") + '"><code>' + $(this).html() + '</code></a>');
});
});
$("div.post-body").children("code").each(function() {
$(this).replaceWith(function() {
return $("<a href='/search/?q=" + encodeURIComponent($(this).text()) + "'><code>" + $(this).html() + "</code></a>");
});
});
Labels: JavaScript, jQuery, Lanjutan
9 Comments:
saya penulisan kodenya begini bos!
<pre><codec> .... </codec></pre>
gimana dong...xixixi
By Beben Koben, at Tuesday, March 13, 2012 at 2:18:00 AM GMT+7
@Beben Koben Menyiasatinya, kita melencong saja dari penulisan code atau pre!
Bikin tagging sendiri/terpisah saja bos...wekekekekkkk
Intinya kan search kata kunci toh..hohohoho
By Beben Koben, at Tuesday, March 13, 2012 at 2:50:00 AM GMT+7
@Beben Koben Wkwkwk... emang XML??
By Taufik Nurrohman, at Tuesday, March 13, 2012 at 12:58:00 PM GMT+7
@Taufik Nurrohman Malah ngakak!!!
Sy dah bikin bos, pakek tagging <q>
Dgn search ke google custome search!
Salah tanggep ini mah...qiqiqiqi
Yg penting kan tagging dari si jQuery pluginnya kan? eik eik eik :P
By Beben Koben, at Tuesday, March 13, 2012 at 8:28:00 PM GMT+7
@Beben Koben Saya malah belum tahu soal format URL Google custom search. Tapi kalau untuk URL Google normal bisa mudah dibuat seperti ini:
$('q').each(function() {
$(this).replaceWith(function() {
return $('<a href="http://www.google.com/search?q=' + $(this).text() + '"><q>' + $(this).html() + '</q></a>');
});
});
Saya sudah coba dan berhasil.
By Taufik Nurrohman, at Tuesday, March 13, 2012 at 8:39:00 PM GMT+7
brarti masih canggihan sayah..wekekekekkkk \m/
By Beben Koben, at Friday, March 16, 2012 at 1:19:00 AM GMT+7
mantap, mas gan. boss beben dan hompimpaalaihumgambreng ... mantap. like this,,,
By Day Milovich, at Saturday, July 21, 2012 at 11:06:00 PM GMT+7
Selamat pagi kak, aku menemui kendala dengan metode begini :
$('div.post-body').children('code').each(function() {
$(this).replaceWith(function() {
return $('<a class="allow" title="Telusuri Posting Dengan Kata Kunci : ' + $(this).text() + '" href="http://www.google.com/search?sitesearch=www.sagitasoft.com&q=' + $(this).text() + '" target="_blank"><code>' + $(this).html() + '</code></a>');
});
});
aku coba di halaman demo bisa, tapi berulang kali aku terapkan di blog aku tetep saja gagal, mohon penjelasannya ?
untuk lebih jelasnya silahkan buka di : [url=http://www.sagitasoft.com]SAGITA COM[/url]
By IRIL SAGITA, at Monday, February 3, 2014 at 9:15:00 AM GMT+7
Alahamdulillah sudah bisa kak, cuma salah penempatan script nya saja.
By IRIL SAGITA, at Thursday, February 6, 2014 at 7:26:00 AM GMT+7
Post a Comment
<< Home