การทำลิงค์ในเว็บไซต์ เมื่อมีการคลิกที่ลิงค์ ก็จะแสดงหน้าเพจขึ้นมาแสดง และไม่แสดงในแท๊บใหม่ หรือเปิดหน้าต่างใหม่ เป็นค่าเริ่มต้นปกติ ถ้าต้องการให้แสดงในแท๊บใหม่ หรือเปิดหน้าต่างใหม่ ต้องมีการเขียนโค้ด HTML ตามโค้ดด้านล่างนี้

<a href="http://www.google.com/" target="_blank">Hello, world!</a>

ถ้าผู้พัฒนาเว็บไซต์มีการใช้ Markdown ตามมาตรฐาน Markdown Basic Syntax ณ ตอนนี้ยังไม่รองรับ new tab or window จึงเป็นป้ญหาสำหรับผู้พัฒนาเว็บไซต์ที่นำ Markdown มาใช้งาน จึงเป็นที่มาของโพสต์นี้ ที่ต้องการแชร์ และเป็นการช่วยเหลือนักพัฒนาเว็บไซต์อีกทางหนึ่ง

เราสามารถเขียนโค้ดใน Markdown ได้เหมือนกับการเขียนโค้ด HTML ตามปกติ ตัวอย่างโค้ดด้านล่างนี้

<a href="http://www.google.com/" target="_blank">Hello, world!</a>

ถ้าเรามีความรู้ด้านการเขียนโค้ด HTML มาบ้างก็คงไม่เป็นปัญหาอะไร แต่ผู้ใช้งานส่วนใหญ่เป็นผู้ใช้งานที่ไม่มีความรู้ด้านนี้ มาก่อน มีวิธีที่ไม่ต้องเขียนโค้ด HTML เอง โดยนำความสามารถของ Javascript (jQuery) มาใช้งาน สามารถแก้ไขปัญหา Markdown ไม่สามารถสร้างลิงค์ new tab หรือ window ได้ แสดงตัวอย่างโค้ดด้านล่างนี้

<script>
$(document.links).filter(function() {
  return this.hostname != window.location.hostname;
}).attr('target', '_blank');
</script>

จากโค้ดด้านล่าง เราสามารถกำหนดเพิ่มเติมได้ว่า ชื่อเว็บ หรือโดเมนไหน ที่เราไม่ต้องการให้แสดงหน้าเว็บไซต์ในแท๊บใหม่ หรือ หน้าต่างใหม่ สามารถกำหนดได้มากกว่าหนึ่งโดเมน

<script>
$(document).ready(function() {
   $("a[href^=http]").each(function(){
      var excluded = ['example.com', 'myblog.com']; //whitelist
      for(i=0; i<excluded.length; i++) {
         if(this.href.indexOf(excluded[i]) != -1) {
            return true;
         }
      }
      if(this.href.indexOf(location.hostname) == -1) {
           $(this).click(function() { return true; }); 
           $(this).attr({
               target: "_blank",
               title: "Opens in a new tab or window"
           });
           $(this).click();
      }
   })
});
</script>

แต่โจทย์ของผู้เขียนคือ ต้องการให้คลิกลิงค์แล้วขึ้นหน้าแท๊บใหม่ เฉพาะในส่วนของเนื้อหาที่โพสต์ ทั้งลิงค์ภายในเว็บ หรือภายนอกเว็บ ต้องมีการปรับจาวาสคริปอีกเล็กน้อย ตามตัวอย่างโค้ดด้านล่าง

<!DOCTYPE html>
<html>
<head>
<title>Webmasty.com</title>
</head>
<body>
<h1>Webmasty.com</h1>
<div class="description"><a href="https://www.webmasty.com">go to Webmasty.com</a> 
<a href="https://www.foundthemes.com">go to External link</a></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
var content = $('.description a');
content.filter(function() {
    return this.hostname == window.location.hostname || this.hostname != window.location.hostname;
}).attr('target', '_blank');
});
</script>
</body>
</html>

Output

go to Webmasty.com

go to External link

แต่ยังมี Markdown อีกตัวนึงที่บอกว่าสามารถสร้าง new tap ได้ ชื่อว่า kramdown แต่ผู้เขียนก็ยังไม่ได้ทดสอบ ถ้าได้ไปทดลองแล้วเวิร์คจะมาแชร์ให้ทราบกันอีกทีครับ

kramdown ตัวอย่างการนำมาใช้งาน

[link](url){:target="_blank"}

<a href="https://www.webmasty.com/" target="_blank">Hello, world!</a>

ผู้เขียนหวังว่าคงจะมีประโยชน์แก่ผู้อ่านได้พอสมควร