Я пытаюсь понять, как это делает Facebook. Я знаю, что они используют комментарии и статусы textarea, но если я помечаю кого-то в сообщении или что-то в этом роде, он будет выделять выделение текста в текстовом поле со светло-голубым фоном. Я знаю, что textarea или последнее я знал, по крайней мере, что это невозможно с этим типом элемента, так как они это делают? Какая техника? у кого есть идея? Я беру на себя какой-то дым и зеркала относительно того, как это делается, но не знаете, как это сделать?jQuery или JavaScript, как выделить выделенный текст в текстовом поле
ответ
В некоторой степени используется textarea
, основная часть магии выполнена с помощью div
и CSS. Я вытащил это из Web Inspector в Safari:
<div class="inputContainer">
<div class="uiMentionsInput" id="up84fa_5">
<div class="highlighter" style="direction: ltr; text-align: left; ">
<div style="width: 499px; ">
<span class="highlighterContent"><b>Brandan Lennox</b> is the coolest.</span>
</div>
</div>
<div class="uiTypeahead composerTypeahead mentionsTypeahead" id="up84fa_9" style="height: auto; ">
<div class="wrap">
<input type="hidden" autocomplete="off" class="hiddenInput">
<div class="innerWrap">
<textarea class="uiTextareaAutogrow input mentionsTextarea textInput" title="What's on your mind?" name="xhpc_message_text" placeholder="What's on your mind?" onfocus="return wait_for_load(this, event, function() {if (!this._has_control) { new TextAreaControl(this).setAutogrow(true); this._has_control = true; } return wait_for_load(this, event, function() {JSCC.get('j4f3584ff4f90d07867222385').init(JSCC.get('j4f3584ff4f90d07867222386'));;JSCC.get('j4f3584ff4f90d07867222386').init(["buildBestAvailableNames","hoistFriends"]);JSCC.get('j4f3584ff4f90d07867222383').init({"max":10}, null, JSCC.get('j4f3584ff4f90d07867222385'));;;});});" autocomplete="off" style="height: 48px; direction: ltr; ">What's on your mind?</textarea>
</div>
</div>
</div>
<input type="hidden" autocomplete="off" class="mentionsHidden" name="xhpc_message" value="@[815490222:Brandan Lennox] is the coolest.">
</div>
<div class="attachmentMetaArea"></div>
</div>
важные элементы:
div.highlighter
и его потомокspan.highlighterContent
. Обратите внимание, что стилирует элементb
как выделенный контент.- The messy
onfocus
обработчик для фактическогоtextarea
элемент. Где-то там, он создает объектTextAreaControl
, который, кажется, создает объект где-то еще в DOM, так как сам контентtextarea
не обновляется. input[type=hidden].mentionsHidden
, который отправляет пользовательские данные на сервер, чтобы он знал, кого вы упомянули.
Это полностью зависит от Facebook, но, возможно, это дает вам некоторые идеи относительно того, что вы хотели бы сделать.
Это не делается с использованием классического текстового поля. Я знаю, что это звучит безумно, но по мере ввода он генерирует html, где он может выделять/выделять ключевые слова и перемещать входные данные, чтобы у вас было место для ввода. Вы можете взглянуть на Firebug, чтобы узнать, как это происходит в режиме реального времени.
Firebug показывает текстовое поле ... но, возможно, оно скрыто за созданной магией HTML-вещью? Действительно сумасшедший. – Domenic
Да, это основа моего вопроса, посмотрев в firebug на twitter, linkedin, facebook и других подобных объектах, у которых есть такие функции, я вижу классический тег textarea. Но, услышав ваше исполнение, это имеет смысл. Im, угадывающий div, что, когда вы фокусируетесь на нем, в свою очередь, фокусируется на этом скрытом текстовом поле, а textarea отражает то, что вы вводите в html div, используя ключевые события .. какие некоторые события вызвать другие вещи, например, символ @. – chris
Я разработал пример, основанный на демонстрации html5, которая позволяет вам это делать. Проверьте это http://jsfiddle.net/KStst/ Это просто говорит браузеру сделать редактируемый раздел, и он понимает основные функции html. Вероятно, это не так, как facebook делает это, но учитывая, что html5 - это «будущее», с которым, вероятно, стоит поиграть.
- 1. Как получить выделенный текст в текстовом поле
- 2. jQuery wrap выделенный текст в текстовом поле
- 3. Получить выделенный текст в текстовом поле C#
- 4. JS/jQuery: как выделить или выбрать текст в текстовом поле?
- 5. Как выделить текст в текстовом поле?
- 6. Получить выделенный текст в текстовом поле
- 7. Выделить выделенный текст в редакторе туза
- 8. Ссылка на выделенный текст в текстовом поле
- 9. Как выделить/выбрать текст в текстовом поле wpf без фокуса?
- 10. Как выделить искомый текст в текстовом поле с помощью javascript?
- 11. Как выделить текст в текстовом поле в Windows Phone 7
- 12. Невозможно выделить текст в текстовом поле
- 13. Как проверить выделенный текст в многострочном текстовом поле в C#?
- 14. NSTextField - выделить выделенный текст полужирным, курсивом или подчеркиванием?
- 15. Как отредактировать выделенный текст в текстовом поле в JavaFX?
- 16. Заменить выделенный текст на jquery/javascript
- 17. Как выбрать (выделить) текст в текстовом поле ввода
- 18. Как заменить выделенный текст в текстовом поле html?
- 19. Как изменить выделенный текст в текстовом поле на якорный тег
- 20. Как выделить текст в текстовом поле в программе C# Winforms?
- 21. Есть ли способ выделить текст в текстовом поле?
- 22. Как выделить текст в текстовом поле, когда он получает фокус
- 23. Kineticjs - Есть ли способ выделить выделенный текст?
- 24. jQuery установить выделенный текст
- 25. Как установить текст в текстовом поле JQuery
- 26. Adobe Flash ActionScript 2.0 выделенный текст в текстовом поле
- 27. Как выделить выделенный текст элемента дерева?
- 28. Как добавить символы в выделенный текст в текстовом поле/textarea в javascript при нажатии клавиши
- 29. JQuery удаляет выделенный текст во втором поле
- 30. не удалось выделить выделенный текст в jtextarea
Возможно, они используют контент-доступность http://html5demos.com/contenteditable. Это позволит вам изменить фон части текста – dstarh
@dstarh, что интересно, так это то, что они на самом деле нет, кажется ... – Domenic
Да, я увидел ответ маццучи. Я все еще думаю, что использование contenteditable может достичь такого же эффекта. – dstarh