元スレ+ JavaScript の質問用スレッド vol.133 +

みんなの評価 :
501 = :
ロケットみたいに人が乗れて宇宙に行ける乗り物を作ろうと思います。
どうやれはいいですか?
502 = :
東大阪の町工場に聞いてくれ
503 = :
入り組んでませんよ
ただリンクするだけです
ただかなり前に同じようなことをやった時には、
contenteditableな要素のHTMLを、単純に置換して置き換えるだけだと、
カーソルの位置がリセットされてしまった記憶があります
それで
A cross-browser JavaScript range and selection library.
http://github.com/timdown/rangy
これを使って実装したのです
ただ、どういう実装だったのかすっかり忘れてしまいましたし、
このライブラリも2015年で更新が止まっているので、
今なら今のやり方があるんじゃないかと思ったのです
504 = :
designModeは知ってたけどcontenteditableは知らなかったな
質問の実質はキャレット操作でしょ
キャレット位置は単純にかつ地道にカウントして記憶して戻すしかないでしょ
506 = :
キャレットの位置はこないだも質問が出て大ゲンカになってなかった?
507 = :
便乗で質問します
キャレット無しの場合、本来TEXTAREAやINPUTにキーボード入力するような操作を
DIV要素でやるにはどのような構成になるのでしょうか(googleドキュメントみたいなやつです)
TEXTAREAにキーボード入力したものをval()で取得してDIVにコピー、みたいなのではありません
さらに全角半角や漢字など(TEXTAREAへ入力できるものすべて)も判別したいです
keydown取得してkeyCodeで半角全角を振り分け→漢字などはスペースキーの監視で。
全角時にはバックスペースキー、半角切り替えも監視
など考えましたがそんなめんどくさい処理をしないといけないのか・・?と眉唾でした
(そのためのTEXTAREAやINPUTだと思いましたが)
例えばGoogleドキュメントなどはそういうめんどくさいキー監視をしているのでしょうか?
508 = :
キー監視じゃIMEがどんな変換したかわからないから面倒如何の前に不可能でね
509 = :
例えばhiddenしたTEXTAREAにフォーカスを当てて・・
みたいなことができればと、hiddenしたtextareaにfocusしてみましたが
TEXTAREA内の変更にまでは至りませんでした
>>508
たしかに・・
511 = :
ちなみに稚拙ですがこんな感じです
http://jsfiddle.net/5sgn8d8e/
512 = :
たしかにキャレット位置を保存しておいて、HTMLを書き換えてから戻す
みたいな処理だった気がします
で、すごーーく面倒くさかった記憶があります
RangeオブジェクトとかSelectionオブジェクトとか、
普段全く使わないようなオブジェクトを使って・・
しかもそれらのオブジェクトが異様に難解だった記憶があります
今もそれですかね~
513 = :
>>495
jQueryのtext()では、タグがエスケープされるけど、
html()では、タグも有効になる
要素の内容が変更されたら、change イベントが発行される
正規表現を使う
514 = :
一定の領域では泥臭い作業から逃げられん
論理的に必要なことはどうした考えても何度考えても必要
515 = :
>>507
要素の内容が変更されたら、jQuery のchange イベントが発行される
他には、keypress イベントとか
517 = :
div要素の内容が変更されたら、しかしそもそもdiv要素にどうやってキーボードから書き込むの、っていう話じゃないの>>515
隠しtextarea法が定石なの?
518 = :
定石なんて無い
それでバリアがある環境や、ガラケーみたいなテキスト編集環境に対応できるかは分からんし
一般論としてできる限り細かい調整はしないで諦めたほうが良い
519 = :
>>515
自己レス
jQuery のchange, keypress イベントでは、うまくいかなかった
521 = :
>>517
div要素を編集可能にするだけじゃん
523 = :
そういうのあるんですね
ありがとうございます
ただ要素中のHTMLを書き換えてキャレットを戻せばいいと思っていましたが
よく考えると文字を一文字書き加えるごとに全領域を書き換えるエディタなんてないわけで
テキストノードの中に潜って文字のレベルで操作する必要があると思います
そのためのオブジェクトがRangeオブジェクトだったと思います
面倒くさいですが、面倒くさい方法しかないなら、するしか仕方ないですね・・
524 = :
改行ごとにspanやpで区切るなどして部分的な指定をしやすくすれば、
HTMLの書き換えでもいいのかもしれません
ただ、何か問題があったから前回そうしなかったのではないか、という気もします
525 = :
SelectionオブジェクトとRangeオブジェクトには、
ひととおりの API が定義されていますが、あまり使われていません。
本書でも解説しません。
(…)
Webアプリケーション上でリッチテキスト編集機能が必要な場合は、
ブラウザ間での差異を吸収してくれる既存のソリューションを適用するとよいでしょう。
インターネット上を探せば、そのようなエディタ部品がたくさん転がっています。
名著と名高いサイ本も、リッチテキスト編集周辺はそっけない記述&放り投げです
「たくさん転がっています」って、
これはそういうエディタ部品を作りたい人が読む本じゃないのかと問い詰めたいです
526 = :
>>525
テキストエディタの作り方って本があると思ってんの?
528 = :
>あまり使われていません。
ガリガリ使っとるがな
529 = :
>>527
var ary = [1, 2, 3, 4];
console.log(ary.reduce((acc, n) => acc + `<b id="${n}">${n}</b>`, ''));
530 = :
>>529
ありがとうございました!
531 = :
>>529
console.log(ary.reduce((acc, n) => acc + `<b id="${n}">${n}</b>`, ''));
console.log(ary.map(n => `<b id="${n}">${n}</b>`).join(''));
上の方を選んだ理由は?
532 = :
どっちでもいいけど新しい配列ちゃん生んですぐ殺すとかかわいそうやん
533 = :
そんな無理にmapだのコールバックだの使わなくとも
昔っからある
(''+ary).replace(/(\d+),?/g,'<b id="$1">$1</b>')
でいいじゃん
534 = :
ループさせますが何か
535 = :
>>533
お前が正規表現に慣れてるだけだろwwww
知らんやつにはそっちのほうが宇宙語だろw
536 = :
中途半端に新作作るならいっそリメイクの方が売れると思う
537 = :
jsは昔っからコールバック使うが。
そういう言語だ。
pythonとかから来た人かな?
538 = :
あ?昔から? JavaScriptでmapやreduceが
使えるようになったのはIE9からなんだが?
昔はそんなコード書いてねーよ
539 = :
IEをサポート対象外としてきたものは幸福である
540 = :
IE以外はネスケしかないって時代を知らんのだろうなw
それでよく昔からなんて言えたものだ
541 = :
>>538
おまえ頭湧いてんのかwww
コールバックって言ってんだろwwww
コールバック使うのはmapreduceの専売特許じゃねーんだよアホwwwww
542 = :
昔から使うsetTimeoutもcallbackだな
callbackが昔から使われていることと、replace()が昔からあることは別だが
callbackで配列や文字列操作する関数って昔からあったっけ?
543 = :
>>535
そんなんだから君には成長がないんだよ
544 = :
はぁ?去年から10kgは成長しとるで?
545 = :
もう成長する毛髪もないクセに・・・
546 :
自演で誤魔化し乙w
「昔からある~でいいじゃん」とか言ってるくせに人には君には成長がないキリッとか笑うww
547 = :
何が言いたいんだこいつ
喧嘩したいだけのJS無関係レスは他所でやれ
548 = :
>>533
無理に正規表現を使わずとも、昔からあるfor文でいいじゃん
for (var i = 0, l = ary.length, s = ''; i < l; ++i) {
s += '<b id="' + ary[i] + '">' + ary[i] + '</b>';
}
549 = :
これが見慣れてるな
550 = :
ループ外で使うsをループ初期化部で宣言するのは駄目じゃないか



類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.130 + (974) - [97%] - 2016/10/26 14:18
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.130 + (1001) - [97%] - 2017/11/25 20:45
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.134 + (1001) - [97%] - 2018/8/3 23:15
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.136 + (1001) - [97%] - 2019/1/8 11:30
- + JavaScript の質問用スレッド vol.139 + (1001) - [97%] - 2019/5/27 15:15
- + JavaScript の質問用スレッド vol.137 + (1003) - [97%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.143 + (753) - [97%] - 2020/4/19 5:00
- + JavaScript の質問用スレッド vol.103 + (1001) - [97%] - 2012/11/9 15:30
- + JavaScript の質問用スレッド vol.138 + (1004) - [97%] - 2019/4/20 23:45
トップメニューへ / →のくす牧場書庫について