Как установить подчеркивание оформления текста при наведении на каждое слово текстовой области

Я должен подчеркивать каждое слово в текстовом поле, когда пользователь наводит на него курсор после нажатия кнопки на кнопке, как я могу это сделать?

$('#popup_button').on("click", function(){
$('#my-content').css('cursor', 'help' );
$('#my-content span').hover(function() {
$('#my-content span').css("text-decoration", "underline");
});
});

Текстовое поле содержит только текст. Вам нужно будет сделать это в каком-то другом элементе, который содержит html. Вместо этого можно использовать contenteditable div

charlietfl 11.07.2019 14:55
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
1
505
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это немного сложно, и вам нужно использовать JavaScript, чтобы выполнить то, что вы хотите.

Я предлагаю использовать как Jquery, так и Надпись.js.

Вам также необходимо использовать элемент contenteditable вместо текстового поля. К сожалению, элемент contenteditable нельзя использовать внутри формы. Итак, перед отправкой формы вам нужно будет прочитать значение элемента contenteditable, удалить теги HTML и установить значение скрытой текстовой области в это чистое значение.

Ниже вы можете найти рабочий код HTML, CSS и JS.

HTML:

<div id = "my-content" contenteditable = "true"></div>
<form action = "some-page.php" onsubmit = "return getContent()">
    <textarea id = "my-textarea" style = "display:none"></textarea>
    <input type = "submit" />
</form>
<span id = "popup_button">click me!</span>

CSS:

#my-content {
  border: 1px solid #ccc;
  min-width: 300px;
  min-height: 100px;
  padding: 10px;
}

#my-content:hover span {
  text-decoration: underline;
}


#my-content.clicked:hover span {
  text-decoration: none;
}

JS: Сначала импортируйте jQuery и Lettering.js:

  • https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js
  • https://cdnjs.cloudflare.com/ajax/libs/lettering.js/0.7.0/jquery.letting.min.js

    функция getContent () { $("#my-textarea").val($("#my-content").attr("aria-label")); }
        function setEndOfContenteditable(contentEditableElement) {
            var range,selection;
                range = document.createRange();//Create a range (a range is a like the selection but invisible)
                range.selectNodeContents(contentEditableElement);//Select the entire contents of the element with the range
                range.collapse(false);//collapse the range to the end point. false means collapse to end rather than the start
                selection = window.getSelection();//get the selection object (allows you to change selection)
                selection.removeAllRanges();//remove any selections already made
                selection.addRange(range);//make the range you have just created the visible selection
        }
    
        elem = document.getElementById('my-content');
    
        elem.addEventListener("keypress", function(evt) {
            var _evt = evt;
            setTimeout(function(){
              _evt = _evt || window.event;
              var charCode = _evt.keyCode || _evt.which;
              //if (charCode == 32) {
                $("#my-content").lettering('words');
                setEndOfContenteditable(elem);
              //}
            }, 10, _evt);
        }, false);
    
        $('#popup_button').on("click", function(){
            $('#my-content').css('cursor', 'help' );
            $('#my-content').addClass('clicked');
            $('#my-content span').hover(function() {
              $('#my-content span').css("text-decoration", "none");
              $(this).css("text-decoration", "underline");
            });
        }); 
    

Вот рабочий пример Codepen.

Надеюсь, что это поможет вам.

эй, спасибо за вашу помощь, все работает нормально, всякий раз, когда я навожу курсор на слово, оно показывает подчеркивание, но моя проблема заключается в том, что когда пользователь нажимает кнопку, а затем наводит курсор на слово, оно становится подчеркнутым. надеюсь, вы понимаете мою проблему.

joe 12.07.2019 08:11

@gfdrth, можете ли вы опубликовать свой код где-нибудь, чтобы мы могли попытаться вам помочь?

Alessio 12.07.2019 08:15

я отредактировал свой код выше. я использую ваш код плюс код, который я отредактировал выше. проблема в том, что всякий раз, когда я наводил курсор на слово, подчеркивалось все предложение вместо каждого слова

joe 12.07.2019 08:42

@gfdrth Я обновил свой код. Измените немного свой JS и добавьте новое правило CSS. Проверьте это: codepen.io/alezuc/pen/Gbevyw

Alessio 12.07.2019 08:48

большое спасибо... я внес некоторые изменения в ваш код, и он работает... большое спасибо...

joe 12.07.2019 09:04

еще одна вещь ... когда я наводил курсор на последнее слово, он подчеркивал последние два слова, а не только последнее слово.

joe 12.07.2019 09:30

вы правы, я просто обновляю JS: убрал управление на клавишу пробела и добавил небольшую задержку для запуска функции леттеринга. Дайте мне знать, если он работает нормально для вас

Alessio 12.07.2019 09:46

Эй, пожалуйста, помогите мне еще с одной вещью .... как подсчитать количество слов, введенных в div.

joe 12.07.2019 11:50

@gfdrth Pen обновлен: просто используйте: $('#my-content').children().length

Alessio 12.07.2019 11:55

Другие вопросы по теме