Задать вопрос
@Frendy

Как изменить любой текст на странице при нажатии на него jQuery?

Мне нужно, что при нажатии именно на любой текст на странице он заменялся на “Ok!”.
5e13b100a6eb8971719389.png
5e13b10f0a6fb584479362.png
Я использовал следующий код:
if($('*').text() != ''){
    $(this).click(function(){
        $(this).text('Ok!');
    });
}

Но он работает не корректно. Во первых, потому что если у div есть любой текст и при его замене на “Ok!” заменяются также внутренние Html элементы. Во вторых, опять же если текст лежит просто внутри div, то он будет меняться при нажатии на div в любой точке, а мне нужно при нажатии именно на сам текст.
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Это совсем нетривиально, увы.
Базово можно примерно так:
$(document).click(function(event) {
  var selection = window.getSelection();
  if(
    selection.focusOffset // положение каретки не 0
    && selection.focusNode // есть выбранная нода
    && selection.focusNode.nodeType == 3 // выбрана текстовая нода 
    && selection.focusNode.length !== selection.focusOffset // положение каретки не в конце
  ) selection.focusNode.data = 'OK!';
})
только полбуквы первой и последней в тексте не кликабельны будут.)
Естественно тут не учитываются всякие <br>, <i>, <b> и прочие <span>, которые могут нарубить единый, казалось бы, текст. Тут уж вы сами исхитряйтесь как хотите.)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Dolosweb
Можно сделать так, при нажатии на тег в котором находиться тег он превращаться в textarea. А затем при сохранении он снова становиться первоначальным тегом.
Например:
<p> sample <p>  ->  <textarea> sample new </teaxtarea> ->  <p> sample new <p>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы