のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,837人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    501 : Name_Not - 2018/05/14(月) 14:13:18.73 ID:???.net (+57,+29,-27)
    ロケットみたいに人が乗れて宇宙に行ける乗り物を作ろうと思います。
    どうやれはいいですか?
    502 : Name_Not - 2018/05/14(月) 14:36:11.70 ID:???.net (+52,+29,-26)
    東大阪の町工場に聞いてくれ
    503 : Name_Not - 2018/05/14(月) 15:34:26.40 ID:???.net (+3,-29,-112)
    入り組んでませんよ
    ただリンクするだけです
    ただかなり前に同じようなことをやった時には、
    contenteditableな要素のHTMLを、単純に置換して置き換えるだけだと、
    カーソルの位置がリセットされてしまった記憶があります
    それで
    A cross-browser JavaScript range and selection library.
    http://github.com/timdown/rangy
    これを使って実装したのです
    ただ、どういう実装だったのかすっかり忘れてしまいましたし、
    このライブラリも2015年で更新が止まっているので、
    今なら今のやり方があるんじゃないかと思ったのです
    504 : Name_Not - 2018/05/14(月) 15:59:53.89 ID:???.net (+1,-26,-14)
    designModeは知ってたけどcontenteditableは知らなかったな

    質問の実質はキャレット操作でしょ
    キャレット位置は単純にかつ地道にカウントして記憶して戻すしかないでしょ
    505 : Name_Not - 2018/05/14(月) 16:39:31.52 ID:???.net (-1,-29,-30)
    contenteditableのキャレット操作と
    inputやtextareaのキャレット操作と、なんか違いがあるの?
    506 : Name_Not - 2018/05/14(月) 17:06:15.65 ID:???.net (+57,+29,-25)
    キャレットの位置はこないだも質問が出て大ゲンカになってなかった?
    507 : Name_Not - 2018/05/14(月) 18:07:17.98 ID:???.net (+7,-30,-253)
    便乗で質問します
    キャレット無しの場合、本来TEXTAREAやINPUTにキーボード入力するような操作を
    DIV要素でやるにはどのような構成になるのでしょうか(googleドキュメントみたいなやつです)

    TEXTAREAにキーボード入力したものをval()で取得してDIVにコピー、みたいなのではありません
    さらに全角半角や漢字など(TEXTAREAへ入力できるものすべて)も判別したいです

    keydown取得してkeyCodeで半角全角を振り分け→漢字などはスペースキーの監視で。
    全角時にはバックスペースキー、半角切り替えも監視
    など考えましたがそんなめんどくさい処理をしないといけないのか・・?と眉唾でした
    (そのためのTEXTAREAやINPUTだと思いましたが)
    例えばGoogleドキュメントなどはそういうめんどくさいキー監視をしているのでしょうか?
    508 : Name_Not - 2018/05/14(月) 18:09:37.94 ID:???.net (+64,+29,-14)
    キー監視じゃIMEがどんな変換したかわからないから面倒如何の前に不可能でね
    509 : Name_Not - 2018/05/14(月) 18:20:37.28 ID:???.net (+11,-30,-47)
    例えばhiddenしたTEXTAREAにフォーカスを当てて・・
    みたいなことができればと、hiddenしたtextareaにfocusしてみましたが
    TEXTAREA内の変更にまでは至りませんでした

    >>508
    たしかに・・
    510 : Name_Not - 2018/05/14(月) 18:23:42.47 ID:???.net (-1,-29,-18)
    textareaは表示のまま、potitionでwindowから見切れるように
    ならできました
    ただ、キーボード入力のプルダウンメニューが邪魔になりますが
    511 : Name_Not - 2018/05/14(月) 18:57:37.63 ID:???.net (+27,+0,-25)
    ちなみに稚拙ですがこんな感じです
    http://jsfiddle.net/5sgn8d8e/
    512 : Name_Not - 2018/05/15(火) 00:57:32.59 ID:???.net (+62,+29,-102)
    たしかにキャレット位置を保存しておいて、HTMLを書き換えてから戻す
    みたいな処理だった気がします
    で、すごーーく面倒くさかった記憶があります
    RangeオブジェクトとかSelectionオブジェクトとか、
    普段全く使わないようなオブジェクトを使って・・
    しかもそれらのオブジェクトが異様に難解だった記憶があります
    今もそれですかね~
    513 : Name_Not - 2018/05/15(火) 01:28:59.58 ID:???.net (+6,-29,-75)
    >>495
    jQueryのtext()では、タグがエスケープされるけど、
    html()では、タグも有効になる

    要素の内容が変更されたら、change イベントが発行される

    正規表現を使う
    514 : Name_Not - 2018/05/15(火) 03:08:21.53 ID:???.net (+57,+29,-16)
    一定の領域では泥臭い作業から逃げられん
    論理的に必要なことはどうした考えても何度考えても必要
    515 : Name_Not - 2018/05/15(火) 05:57:19.24 ID:???.net (+29,-29,-28)
    >>507
    要素の内容が変更されたら、jQuery のchange イベントが発行される

    他には、keypress イベントとか
    516 : Name_Not - 2018/05/15(火) 06:31:26.60 ID:???.net (+0,-28,-16)
    IME API使えばいいじゃん
    対応環境無いけど
    517 : Name_Not - 2018/05/15(火) 06:50:37.39 ID:???.net (+7,-25,-16)
    div要素の内容が変更されたら、しかしそもそもdiv要素にどうやってキーボードから書き込むの、っていう話じゃないの>>515
    隠しtextarea法が定石なの?
    518 : Name_Not - 2018/05/15(火) 07:05:39.60 ID:???.net (+57,+29,-36)
    定石なんて無い
    それでバリアがある環境や、ガラケーみたいなテキスト編集環境に対応できるかは分からんし
    一般論としてできる限り細かい調整はしないで諦めたほうが良い
    519 : 515 - 2018/05/15(火) 07:08:00.41 ID:???.net (+0,-29,-21)
    >>515
    自己レス

    jQuery のchange, keypress イベントでは、うまくいかなかった
    520 : 515 - 2018/05/15(火) 07:12:36.31 ID:???.net (-1,-29,-20)
    Electron アプリの、VS Code では、半角文字で入力補完が出る

    Electron とか使わないと無理なのかも
    521 : Name_Not - 2018/05/15(火) 08:01:56.32 ID:???.net (+0,-28,-4)
    >>517
    div要素を編集可能にするだけじゃん
    522 : Name_Not - 2018/05/15(火) 16:04:21.29 ID:???.net (-1,-29,-13)
    ぐぐったらcaret.jsというのがあるみたいだけど
    http://jsfiddle.net/sbrqvc2q/
    523 : Name_Not - 2018/05/16(水) 06:07:00.35 ID:???.net (+62,+29,-98)
    そういうのあるんですね
    ありがとうございます
    ただ要素中のHTMLを書き換えてキャレットを戻せばいいと思っていましたが
    よく考えると文字を一文字書き加えるごとに全領域を書き換えるエディタなんてないわけで
    テキストノードの中に潜って文字のレベルで操作する必要があると思います
    そのためのオブジェクトがRangeオブジェクトだったと思います
    面倒くさいですが、面倒くさい方法しかないなら、するしか仕方ないですね・・
    524 : Name_Not - 2018/05/16(水) 08:26:59.14 ID:???.net (+57,+29,-60)
    改行ごとにspanやpで区切るなどして部分的な指定をしやすくすれば、
    HTMLの書き換えでもいいのかもしれません
    ただ、何か問題があったから前回そうしなかったのではないか、という気もします
    525 : Name_Not - 2018/05/16(水) 11:43:04.01 ID:???.net (+96,+29,-258)
    SelectionオブジェクトとRangeオブジェクトには、
    ひととおりの API が定義されていますが、あまり使われていません。
    本書でも解説しません。
    (…)
    Webアプリケーション上でリッチテキスト編集機能が必要な場合は、
    ブラウザ間での差異を吸収してくれる既存のソリューションを適用するとよいでしょう。
    インターネット上を探せば、そのようなエディタ部品がたくさん転がっています。

    名著と名高いサイ本も、リッチテキスト編集周辺はそっけない記述&放り投げです
    「たくさん転がっています」って、
    これはそういうエディタ部品を作りたい人が読む本じゃないのかと問い詰めたいです
    526 : Name_Not - 2018/05/16(水) 12:06:09.71 ID:???.net (+70,+29,-42)
    >>525
    テキストエディタの作り方って本があると思ってんの?
    528 : Name_Not - 2018/05/16(水) 13:56:16.68 ID:???.net (+57,+29,-15)
    >あまり使われていません。

    ガリガリ使っとるがな
    529 : Name_Not - 2018/05/16(水) 17:09:18.55 ID:???.net (+11,-30,-29)
    >>527
    var ary = [1, 2, 3, 4];
    console.log(ary.reduce((acc, n) => acc + `<b id="${n}">${n}</b>`, ''));
    530 : Name_Not - 2018/05/16(水) 17:13:13.29 ID:???.net (+23,-5,+0)
    >>529
    ありがとうございました!
    531 : Name_Not - 2018/05/16(水) 19:24:22.87 ID:???.net (+4,-30,-59)
    >>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 : Name_Not - 2018/05/16(水) 19:37:19.81 ID:???.net (+57,+29,-6)
    どっちでもいいけど新しい配列ちゃん生んですぐ殺すとかかわいそうやん
    533 : Name_Not - 2018/05/16(水) 21:46:41.00 ID:???.net (+72,-30,-21)
    そんな無理にmapだのコールバックだの使わなくとも
    昔っからある
    (''+ary).replace(/(\d+),?/g,'<b id="$1">$1</b>')
    でいいじゃん
    534 : Name_Not - 2018/05/16(水) 22:03:54.34 ID:???.net (+50,+27,-13)
    ループさせますが何か
    535 : Name_Not - 2018/05/16(水) 23:57:30.03 ID:???.net (+96,+29,-34)
    >>533
    お前が正規表現に慣れてるだけだろwwww
    知らんやつにはそっちのほうが宇宙語だろw
    536 : Name_Not - 2018/05/17(木) 00:38:42.11 ID:???.net (+57,+29,-17)
    中途半端に新作作るならいっそリメイクの方が売れると思う
    537 : Name_Not - 2018/05/17(木) 00:42:57.16 ID:???.net (+57,+29,-29)
    jsは昔っからコールバック使うが。
    そういう言語だ。
    pythonとかから来た人かな?
    538 : Name_Not - 2018/05/17(木) 00:59:32.71 ID:???.net (+31,-29,-34)
    あ?昔から? JavaScriptでmapやreduceが
    使えるようになったのはIE9からなんだが?
    昔はそんなコード書いてねーよ
    539 : Name_Not - 2018/05/17(木) 01:40:37.68 ID:???.net (+53,+25,-18)
    IEをサポート対象外としてきたものは幸福である
    540 : Name_Not - 2018/05/17(木) 01:52:20.30 ID:???.net (+57,+29,-12)
    IE以外はネスケしかないって時代を知らんのだろうなw
    それでよく昔からなんて言えたものだ
    541 : Name_Not - 2018/05/17(木) 02:11:05.39 ID:???.net (+62,+29,-51)
    >>538
    おまえ頭湧いてんのかwww
    コールバックって言ってんだろwwww
    コールバック使うのはmapreduceの専売特許じゃねーんだよアホwwwww
    542 : Name_Not - 2018/05/17(木) 03:14:54.20 ID:???.net (+3,-29,-48)
    昔から使うsetTimeoutもcallbackだな
    callbackが昔から使われていることと、replace()が昔からあることは別だが

    callbackで配列や文字列操作する関数って昔からあったっけ?
    543 : Name_Not - 2018/05/17(木) 06:21:36.32 ID:???.net (+70,+29,-3)
    >>535
    そんなんだから君には成長がないんだよ
    544 : Name_Not - 2018/05/17(木) 06:29:42.28 ID:???.net (+57,+29,-9)
    はぁ?去年から10kgは成長しとるで?
    545 : Name_Not - 2018/05/17(木) 07:30:57.08 ID:???.net (+52,+29,-7)
    もう成長する毛髪もないクセに・・・
    546 : Name_Not - 2018/05/17(木) 09:12:07.01 ID:+SF4BPiN.net (+24,+29,-22)
    自演で誤魔化し乙w
    「昔からある~でいいじゃん」とか言ってるくせに人には君には成長がないキリッとか笑うww
    547 : Name_Not - 2018/05/17(木) 20:16:53.61 ID:???.net (+57,+29,-8)
    何が言いたいんだこいつ
    喧嘩したいだけのJS無関係レスは他所でやれ
    548 : Name_Not - 2018/05/17(木) 21:16:59.69 ID:???.net (+8,-30,-63)
    >>533
    無理に正規表現を使わずとも、昔からあるfor文でいいじゃん

    for (var i = 0, l = ary.length, s = ''; i < l; ++i) {
    s += '<b id="' + ary[i] + '">' + ary[i] + '</b>';
    }
    549 : Name_Not - 2018/05/17(木) 21:29:14.42 ID:???.net (+52,+29,-2)
    これが見慣れてるな
    550 : Name_Not - 2018/05/17(木) 21:48:22.10 ID:???.net (+91,+29,-6)
    ループ外で使うsをループ初期化部で宣言するのは駄目じゃないか
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について