ウェブサイトのコードブロックの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互換モードを使用するようにする

推薦する

Dockerはターミナルで中国語を入力できない問題を解決します

序文:ある日、DockerでMySQLサービスを構築したところ、MySQLのコマンドラインで中国語の...

CSS3 タブアニメーションの例 背景切り替えの動的効果

CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...

Linux calコマンドの使用

1. コマンドの紹介cal (カレンダー) コマンドは、現在の日付または指定された日付のグレゴリオ暦...

Alibaba Cloud イメージリポジトリの Docker 構成変更の実装

docker リポジトリ自体は非常に遅いですが、中国の Alibaba Cloud ミラー リポジト...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

HttpsページでBaiduシェアを使用するためのソリューション

サイト全体で https アクセスを有効にしてから、共有コードが利用できなくなり、有効になっていた小...

Harborを使用してプライベートDockerリポジトリを構築する方法

目次1. オープンソースの倉庫管理ツール Harbor 2 インストール2.1 DockerとDoc...

mysql の追加、削除、変更、クエリの基本ステートメント

文法以下は、MySQL テーブルにデータを挿入するための INSERT INTO コマンドの一般的な...

Nginx で 403 forbidden を解決するための完全な手順

ウェブページに403 Forbiddenと表示されるNginx (yum インストール ログは通常 ...

JSプロトタイプとプロトタイプチェーンについての簡単な説明

目次1. プロトタイプ2. プロトタイプポインタ: __proto__要約する1. プロトタイプJa...

MySQL ルートパスワードをリセットする方法

目次1. ルートパスワードを忘れてしまい、データベースにアクセスできない: DBA にとって、スーパ...

古い Vue プロジェクトに Vite サポートを追加する方法

1. はじめに会社のプロジェクトを引き継いで2年になります。今では毎回プロジェクトを起動するのに1分...

ElementUI el-select の過剰なデータに対する解決策についての簡単な説明

目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...

スワイパープラグインを使用して Vue でカルーセルを実装する例

目次vue - スワイパープラグインを使用してカルーセルを実装するカルーセルのバグを解決するには、w...

Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル

この記事では、Fedora 28 に i3 をインストールして簡単に設定する方法を説明します。 1....