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 つの図
2017 年に Vulhub に取り組み始めてから、私は厄介な問題に悩まされてきました。Docker...
最近、私たちの小さなチームは、サーバー上の共有フォルダーを共有して、全員がパブリックリソースドキュメ...
これは、W3C 組織が HTML4 に対して提示したスタイル推奨事項です。残念ながら、ブラウザが独自...
<br />私が良いと思った国内のデザインサイトをまとめてみました。広告ではありません!...
目次序文最適化派生的な質問: beforeDestroy はトリガーされませんか?序文タイマーをクリ...
JavaScriptは画像を表示したり非表示にしたりしますが、参考までに具体的な内容は次のとおりで...
降順インデックスとは何ですか?インデックスについてはよくご存知かもしれませんが、降順インデックスにつ...
質問:最近、プロジェクトの統計を行っていたときに、テーブルを上下にスクロールしたときにテーブルの先頭...
ブーストをインストールPython から C/C++ を呼び出す方法はたくさんあります。この記事では...
Nginx は、リバース プロキシ機能を使用して負荷分散を実装できるほか、フォワード プロキシ機能を...
この記事の例では、参考までに簡単な計算機を実装するためのjsの具体的なコードを共有しています。具体的...
テーブル構造を設計する場合、数値型は最も一般的な型の 1 つですが、数値型をうまく使用するのは想像す...
置換を削除したり文字列を削除したりできる tr コマンドは、誰もがよく知っています。 英語では、英語...
目次1. 反射とは何ですか? 2. JavaScriptで反映する2.1 Reflect.get(タ...
免責事項:プロジェクトでは ROS 環境を使用する必要があるため、これは Ubuntu 20.04 ...