ウェブサイトのコードブロックのpreタグにコピーコードボタンコードを追加します

ウェブサイトのコードブロックのpreタグにコピーコードボタンコードを追加します

他のよりプロフェッショナルなブログ システムを参照すると、コード ブロックにコードのコピー ボタンがあります。コードブロック全体をすばやくコピーするコード。だから、この機能を自分のブログにも追加したいのです。

注: Chrome テストに合格しました。他のブラウザはテストされていません。

実装のアイデア:

1. ページが読み込まれたら、jsを使用して各preタグに「コードをコピー」ボタンを追加します。

2. ボタンにクリックイベントを追加します。クリックイベントの機能は、コードブロックの内容をコピーすることです。

実装コード:

css部分では、btn-pre-copyはjsを使用してpreタグ内に追加された「コードをコピー」ボタンです。 CSS の役割は、pre タグの右上隅に表示されるようにすることです。ここでは、preタグとボタンの位置属性に注意する必要があります。

.content pre{
    位置: 相対的;
    背景色: #f5f5f5;
    境界線: 1px 実線 #ccc;
    境界線の半径: 4px;
    パディング: 10px;
}
pre .btn-pre-copy{
    -webkit-user-select: なし;
    -moz-user-select: なし;
    -ms-user-select: なし;
    -khtml-ユーザー選択: なし;
    ユーザー選択: なし;
    位置: 絶対;
    上: 10px;
    右: 12px;
    フォントサイズ: 12px;
    行の高さ: 1;
    カーソル: ポインタ;
    色: hsla(0,0%,54.9%,.8);
    トランジション: カラー .1s;
}

js 部分は主に pre タグにボタンを追加し、コピー部分を実装します。ここでのコピー部分の実装は、最初に一時ノード textarea をインスタンス化し、次にこの一時ノードに pre のコンテンツを設定し、次にコピーするコンテンツを選択し、最後にノードを破棄することです。特定の参照コード。 js部分はjqueryに依存します

$(関数(){
    //コード要素の各文字列にコピー コード ノードを追加します。let preList = $(".content pre");
    for (let pre of preList) {
        //各コード ブロックに「コードをコピー」ボタンを追加します。let btn = $("<span class=\"btn-pre-copy\" onclick='preCopy(this)'>コードをコピー</span>");
        btn.prependTo(pre);
    }
});

/**
    * コピーコード操作を実行する * @param obj
    */
関数 preCopy(obj) {
    //コピーを実行 let btn = $(obj);
    pre = btn.parent() とします。
    //コピー機能を実現するため。一時的なテキストエリアノードを追加します。コンテンツをコピーするために使用します let temp = $("<textarea></textarea>");
    //コンテンツをコピーするときにボタンのテキストをコピーしないでください。まず一時的に空のbtn.text("");
    temp.text(pre.text());
    temp.appendTo(pre);
    temp.select();
    document.execCommand("コピー");
    temp.remove();
    //ボタン名を変更します btn.text("コピーが成功しました");
    //一定時間後にボタン名を元に戻す setTimeout(()=> {
        btn.text("コードをコピー");
    },1500);
}

以下は gitee の簡単なデモです。デモ例:

オンラインテスト: http://demo.jb51.net/js/2021/code_copy/

これで、ウェブサイトコードブロックのpreタグにコピーコードボタンコードを追加する方法についての記事は終了です。より関連性の高いコードのハイライトとコピーコード機能の追加内容については、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

<<:  CSS3 でテキスト ストロークを実装する 2 つの方法 (要約)

>>:  IE8を閲覧するときにウェブサイトが自動的にIE7互換モードを使用するようにする

ブログ    

推薦する

ウェブサイトをより高く、よりデザイン的に見せる方法

「ウェブサイトを高級感のあるものにするにはどうすればいいでしょうか? それともデザイン重視にすればい...

アイデアを使用して Springboot 初期化サーバーを構築する際の問題分析

問題の説明最近、Springbootプロジェクトを構築していたところ、会社のネットワークケーブルに接...

Linux環境にMySQLデータベースをインストールする詳細なチュートリアル

1. データベースをインストールする1) yum -y install mysql-server (...

VirtualBox+Ubuntu16でKubernetesクラスタを構築する実装

目次Kubernetesについて基本的な環境の準備VirtualBoxをインストールするUbuntu...

MySQL双方向バックアップの実装方法

MySQL 双方向バックアップはマスター-マスター バックアップとも呼ばれ、両方の MySQL サー...

docker の実行に必要な権限の分析

Docker を実行するには root 権限が必要です。非 root ユーザーに docker コマ...

MySQL の永続性とロールバックの原理を 1 つの記事で理解する

目次再実行ログディスクデータを直接更新するのではなく、最初にメモリデータを更新する必要があるのはなぜ...

JS 1次元配列を3次元配列に変換する例

今日、CSDN の Q&A セクションで友人が質問をしているのを見ました。彼は 1 次元配列...

Vueはリストのシームレスなスクロールを実装します

この記事の例では、リストのシームレスなスクロールを実現するためのvueの具体的なコードを参考までに共...

Vuexはシンプルなショッピングカートを実装します

この記事では、参考までに、Vuex の具体的なコードを共有して、簡単なショッピングカートを実装します...

ダイナミッククロックを実現するJS+CSS

この記事の例では、動的な時計を実装するためのJS + CSSの具体的なコードを参考までに共有していま...

MySQLインデックスベースのストレステストの実装

1. データベースデータをシミュレートする1-1 データベースとテーブルスクリプトを作成する - v...

js 配列エントリ() 反復メソッドを取得する

目次1.entires() メソッドの詳細な構文2.entires() メソッドの一般的な使用法と注...

タイムスタンプの差を計算するSQLメソッド

タイムスタンプの差を計算するSQLメソッド概要場合によっては、特定のレコードを時間で検索する必要があ...

React NativeとiOSの相互作用の詳細な説明

目次前提条件RNはiOSに価値を渡す方法1: ネイティブに値を通常通り渡す方法2: コールバック関数...