一般的な DIV タスク (パート 2) — DIV のエディターとさまざまな DIY アプリケーションへの変換

一般的な DIV タスク (パート 2) — DIV のエディターとさまざまな DIY アプリケーションへの変換
HTML5 で contentEditable 属性が導入されて以来、div は textarea と同様に最もよく使用されるエディターとして使用できるようになりました。
1. div をエディターとして有効にする<br />div を編集状態にするのは非常に簡単です。次の手順を実行するだけです。

コードをコピー
コードは次のとおりです。

div.contentEditable を true に設定します。

これにより編集モードになります。もちろん、HTML で直接 contenteditable を設定することもできます。
一般に、視覚的な編集を実現するには、contentEditable と designMode の 2 つの方法を使用できます。 ContentEditable は最初に IE で実装され、その後主要なブラウザが徐々に contentEditable をサポートするようになり、HTML5 標準にも contentEditable が含まれるようになりました。 designMode ではドキュメント全体を編集可能な状態にすることしかできませんが、contentEditable では任意の HTML 要素を編集可能な状態にすることができます。その応用範囲は designMode よりも広く、contentEditable の使用は今後のトレンドです。
ContentEditable と draggable は互いに競合する場合があります。contentEditable=true の場合、draggable (存在する場合) は通常 false に設定する必要があります。そうしないと編集できません。
2. div コンテンツを編集するときは、Enter キーを押して変更を確定します
この実装は非常にシンプルです。イベント コールバックでイベントのキー値を決定するだけです。

コードをコピー
コードは次のとおりです。

htmlElement.contentEditable を false に設定します。
イベントキーコードが13の場合
htmlElement.blur();
}

3. Shift+Enter が押されたかどうかを判断し、押された場合は行を折り返します。 <br />実装原理は上記と同じで、比較的簡単です。

コードをコピー
コードは次のとおりです。

if(event.shiftKey && event.keyCode==13) {
戻る;
}

これは Chrome で実装されています。処理は必要なく、直接返すだけです。 FireFox では、改行を行うために <br> を追加する必要があります。

コードをコピー
コードは次のとおりです。

if(event.shiftKey && event.keyCode==13) {
var テキスト = htmlElement.textContent;
htmlElement.innerHTML = テキスト + '
';
戻る;
}

4. div コンテンツを編集する場合、改行は禁止されます<br />制限を超えたコンテンツ編集の処理方法に関連する CSS プロパティをいくつか示します。

コードをコピー
コードは次のとおりです。

width: 80px; ----この行は div の幅を制限します。
text-overflow:clip; ---余分なテキストは折り返されたり省略されたりしません。 (この行を省略記号に設定すると、オーバーフローが発生したときに省略記号(...)が表示されます)
white-space:nowrap; -----テキストを1行に表示するように強制します
overflow:hidden; ------------------オーバーフローテキストを非表示にする
word-wrap: break-word;------自動改行を設定する

通常、最初の 2 つを設定することで目的の効果が得られます。他の要件がある場合は、次の属性を追加できます。
5. 編集中にdivの周りのフォーカスフレームを削除する
CSS で outline:none; または outline:0; を設定するだけです。
6. Div が編集状態になった後にすべてのテキストを選択する<br />これは、選択オブジェクトのmodify(alter, direction, granularity) メソッドを使用して実現できます。このメソッドは、フォーカスの位置を変更したり、選択範囲のサイズを拡大または縮小したりするために使用されます。このメソッドを使用すると、すべて選択したりフォーカスを移動したりするなど、さまざまな操作を実装できます。パラメータの意味は次のとおりです。
変えること: 変化の仕方。 「move」はフォーカスを移動するために使用され、「extend」は選択を変更するために使用されます。
方向: 移動の方向。オプションの値は forward | backword または left | right です。
粒度: 移動の単位またはサイズ。オプションの値: 「character」、「word」、「sentence」、「line」、「paragraph」、「lineboundary」、「sentenceboundary」、「paragraphboundary」、または「documentboundary」。
この機能は、Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1 以降のバージョンでのみサポートされています。公式ドキュメント: https://developer.mozilla.org/en/DOM/Selection/modify。
次の例では、div が編集状態になったときにすべてのテキストを選択します。

コードをコピー
コードは次のとおりです。

if (window.getSelection) {
var sel = window.getSelection();
sel.modify('move','left','documentboundary');
sel.modify('extend','right','documentboundary');
}

残念ながら、FireFox の実装では、「sentence」、「paragraph」、「lineboundary」、「sentenceboundary」、「paragraphboundary」、「documentboundary」パラメータはサポートされていません。考え方を変えて、line パラメータを使用して実装する必要があります。

コードをコピー
コードは次のとおりです。

var isFireFox = 関数() {
var ua = navigator.userAgent.toLowerCase();
!!ua.match(/firefox\/([\d.]+)/); を返します。
};
if (isFireFox()) {
var count = htmlElement.innerHTML.split('
')。長さ;
(var i = 0; i < count; i++) の場合 {
sel.modify('extend', 'right', 'line');
}
}

7. divのスクロールバーを最後の位置まで自動的にスクロールするように設定する
ここでは、div のいくつかの便利なプロパティ (scrollTop、scrollLeft、scrollWidth、scrollHeight) が使用されています。次の実装例を見てみましょう。

コードをコピー
コードは次のとおりです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<ヘッド>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="キーワード" content="スクロールバー、スクロールバー、ページの下部、チャットウィンドウ、" />
<meta name="description" content="場合によっては (チャット プログラムを開発するときなど)、スクロール バーを下部に保持する必要があります。たとえば、チャット ウィンドウでは、最新の送受信メッセージが下部に表示される必要があります。下部のコンテンツを表示したい場合は、スクロール バーを下部に保持する必要があります。"/>
<title>スクロールバーを下部に維持する方法 - スクロールバー、ページの下部、チャットウィンドウ、</title>
</head>
<本文>
<div id="例">
<h3 id="example_title">スクロールバーを下部に維持する方法</h3>
<div id="example_main">
<!--******************************************** サンプルコードの開始****************************************-->
<script type="text/javascript">
関数 add()
{
var now = 新しい Date();
var div = document.getElementById('scrolldIV');
div.innerHTML = div.innerHTML + 'time_' + now.getTime() + '
';
div.scrollTop = div.scrollHeight;
}
</スクリプト>
<span class="notice">最新の情報を挿入するには、「行を挿入」ボタンをクリックしてください。スクロールバーが表示されたら、自動的に一番下に留まります。 </span>

<div id="scrolldIV" style="overflow:auto; 高さ: 100px; 幅: 400px; 境界線: 1px solid #999;"></div>
<input type="button" value="行を挿入" onclick="add();">
<!--**************************************** サンプルコードの終了********************************************-->
</div>
</div>
</本文>
</html>

一番下までスクロールするには、div.scrollTop = div.scrollHeight; を設定するだけです。 scrollHeight は、内部要素の非表示部分を含む内部要素の絶対幅です。 scrollLeft についても同様です。右端までスクロールする場合は、div.scrollLeft = div.scrollWidth; と設定するだけです。
さらに、div の offsetHeight、offsetLeft などの関連する測定プロパティを組み合わせることで、スクロール バーの位置を簡単に制御できます。
8. div 入力ボックスの高さ調整<br />高さ調整とは、入力行数が増えるにつれて入力ボックスがどんどん高くなり、一定の高さに達すると垂直スクロールバーが表示されることを意味します。
複数行のテキスト フィールドとして、textarea はほとんどのニーズを満たします。ただし、textarea の欠点の 1 つは、通常の div タグのようにコンテンツに適応できないことです。テキストエリアの高さは常に固定されています。インタラクティブなエクスペリエンスを向上させるためにテキスト フィールドを高度に適応させたい場合、問題が発生することがあります。もちろん、JS を使用して高さを制御し、適応性を実現することもできます。実際、ここで div を使用してこの効果をシミュレートできます。以下はネットユーザーによる実装です:
HTMLコード:

コードをコピー
コードは次のとおりです。

<div class="testbox" contenteditable="true"></div>

対応する CSS コード:

コードをコピー
コードは次のとおりです。

.テストボックス{
幅: 400ピクセル;
最小高さ: 120px;
最大高さ: 300px;
左マージン: 自動;
右マージン: 自動;
パディング: 3px;
アウトライン: 0;
境界線: 1px 実線 #a0b3d6;
フォントサイズ: 12px;
単語折り返し: 単語を区切る;
オーバーフロー-x:非表示;
オーバーフロー-y: 自動;
}

実際、多くの実装はインターネットから来ています。ここですべてのネットユーザーに心から感謝の意を表したいと思います。ここで挙げた問題の多くを解決する方法は他にもたくさんあります。私たちは、皆さんが前向きに考え、関連する知識を自分のものにすることを奨励しています。

<<:  Firefox または IE でスパン幅が決定されない場合の解決策

>>:  JavaScript プロトタイプチェーンを理解するための 2 つの図

推薦する

HTMLのタグと要素の違いの詳細な説明

ウェブページに慣れていない友人の多くは私と同じように、HTML で要素、タグ、属性がどのように定義さ...

MySQL に大量のデータを挿入するときに重複データを除外する方法

目次1. 問題を発見する2.重複したデータを残さずにすべて削除する3. 削除テーブルから重複データを...

要素の水平方向の中央揃えを実現する3つの方法と、固定レイアウトとフローレイアウトの概念の理解

CSS でテキストを中央揃えにするプロパティは非常に簡単に実現できます。text-align:cen...

MySQL で '%' を含むフィールドをクエリする方法の詳細な説明 (ESCAPE の使用法)

SQLのlike文では、例えば SELECT * FROM user WHERE username...

MySQL InnoDBエンジンのインデックスとストレージ構造の詳細な説明

序文Oracle や SQL Server などのデータベースには、ストレージ エンジンが 1 つだ...

MySQL ページングクエリ最適化テクニック

ページング クエリを使用するアプリケーションでは、LIMIT と OFFSET を含むクエリが非常に...

HTML の div、td、p およびその他のコンテナーでの強制改行と非改行の実装

1. 改行を強制せず、省略記号で終了します。コードをコピーコードは次のとおりです。 <div ...

Vue で Excel ストリーム ファイルをダウンロードし、ダウンロード ファイル名を設定する方法

目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...

Linux には make コマンドがありません (make: *** ターゲットが指定されておらず、makefile または make コマンドのインストール方法が見つかりません)

知らせ! ! !この状況は、実際には仮想マシンのインストール中に回避できます。次回仮想マシンをテスト...

MySQLでユーザーを作成し、ユーザーに権限を付与する方法の詳細なチュートリアル

目次ユーザー管理新しいユーザーを作成するユーザー名の変更ユーザーのパスワードを設定するルートパスワー...

Dockerコマンドは一般ユーザーが実行できるように実装されている

dockerをインストールすると、通常はdockerユーザーグループが作成されます。ステップ2: 現...

VirtualBox で作成された Debian 仮想マシンは Windows ホストとファイルを共有します

用語: 1. VM: 仮想マシンステップ: 1. Windows 10 に VirtualBox 6...

HTMLタグIDは変数にできる

<table id=" <%=var1%>">、var1...

ウェブカラーのコントラストと調和のテクニックの共有

色のコントラストと調和対照的な状況では、色の相互作用は単一の色によって与えられる感覚とは異なります。...

Zabbixのインストールと展開の詳細な説明

序文Zabbix は最も主流のオープンソース監視ソリューションの 1 つです。導入自体は難しくありま...