كيفية نسخ النص إلى الحافظة Clipboard من code> and <pre> tags> باستخدام Jquery و JS؟

تطوير الويب Backend - Javascript

بنتعلم في هذا المقال كيفية نسخ النص إلى الحافظة Clipboard من code> and <pre> tags> باستخدام Jquery و JS. بحيث يتم تطبيق الكود في ملف واحد واستخدامه في جميع الصفحات

الفكره نتعلم كيف نضيف button في tags الخاصه بالاكواد code> and <pre> tags>

للمزيد حول code> and <pre> tags> انقر هنا HTML Computer Code Elements

الصورة التالية توضح الفكره:


في الصورة اضفنا button في pre> tags> وطبقنا عليه كود للنسخ ، ولتأكيد النسخ عرضنا alert message كما في الصورة. 
تمام نشوف كيف بنطبق هاذ الحكي: 
اولا اضفنا كود JavaScript التالي في ملف منفصل باسم clipboard.js :

$(document).ready(function () {
    $('code, pre').append('<span class="command-copy" ><i class="fa fa-clipboard" aria-hidden="true"></i></span>');
    $('code span.command-copy').click(function (e) {
        var text = $(this).parent().text().trim(); //.text();
        var copyHex = document.createElement('input');
        copyHex.value = text
        document.body.appendChild(copyHex);
        copyHex.select();
        document.execCommand('copy');
        console.log(copyHex.value)
        document.body.removeChild(copyHex);
        $('#CopyMessage').fadeIn(1000);
        setTimeout(function () {
            $('#CopyMessage').fadeOut(1000);
        }, 3000);
    });
    $('pre span.command-copy').click(function (e) {
        var text = $(this).parent().text().trim();
        var copyHex = document.createElement('input');
        copyHex.value = text
        document.body.appendChild(copyHex);
        copyHex.select();
        document.execCommand('copy');
        console.log(copyHex.value)
        document.body.removeChild(copyHex);
        $('#CopyMessage').fadeIn(1000);
        setTimeout(function () {
            $('#CopyMessage').fadeOut(1000);
        }, 3000);
    });
})
في هذا الكود اضنفا button باستخدام <span> واضنفا ايقونه النسخ باستخدام <li> وعملنا append الى pre> tags> وطبقنا عليه class باسم
 command-copy
بعد هيك رجعنا النص الموجود داخل  pre> tags> وخزنا النتيجة في متغير باسم text وبعد هيك عملنا متغير ثاني من نوع input باسم copyHex ودمجنا مع body . ثم نسخنا النص باستخدام الكود 
document.execCommand('copy')    
واخر اشي حذفنا input من body.

الكود التالي هو المسؤول عن عرض رسالة تم نسخ الكود بنجاح بالاخضر 

$('#CopyMessage').fadeIn(1000);
        setTimeout(function () {
            $('#CopyMessage').fadeOut(1000);
        }, 3000);
الاسم CopyMessage هو Id ل Div في الصفحه وكود هذا Div هو (هذا الكود بكون في صفحة العرض )
  <div class="alert alert-success" id="CopyMessage" style="display:none;">
     تم نسخ الكود بنجاح
  </div>
طبقنا عرض الرسالة بحركة fade-In بسرعه 1000 mil second ، بعدها اضنفا وقت لاختفاء هذه المسج بمقدار 3000 mil second بحركه fadeOut
الكود الخاص بملف CSS (اسم الملف clipboard.css) :
code,
pre {
    position: relative;
}
    code,
    pre  {
        display: block;
        padding: 20px;
        background: #f2f2f2;
        color: #555755;
    }
span.command-copy {
    position: absolute;
    top: 10px;
    right: 10px;
    opacity: .6;
    font-size: 20px;
    color: #555755;
}
    span.command-copy:hover {
        cursor: pointer;
        border-color: #696969;
        background-color: #e0e0e0;
    }
#CopyMessage {
    position: fixed;
    top: 150px;
    left: 50%;
    z-index: 9999;
    border-radius: 0px;
    transform: translateX(-50%);
   box-shadow: rgba(50, 50, 93, 0.25) 0px 6px 12px -2px, rgba(0, 0, 0, 0.3) 0px 3px 7px -3px;
}
في هذا الملف تم اضافة:
الكود الخاص ب code, pre للتحكم بمكان عرض button داخلها بحيث يتم عرض button واحد في مكان ثابت في كل code, pre
الكود الخاص بتصميم button الي كان الو class باسم command-copy باستخدام الكود في span.command-copy . واضنفتا كمان تأثير عند تحريك المؤشر فوقه باستخدام span.command-copy:hover 
واضنفا تصميم خاص بالرسالة تم النسخ بنجاح الى كان الها Id باسم CopyMessage بالكود #CopyMessage 
النتيجة: