Как изменить ЛЮБОЙ текст при нажатии на него? jQuery - PullRequest
0 голосов
/ 07 января 2020

Я хочу, чтобы любой текст на сайте изменился на 'Ok!' когда я нажимаю на него.

enter image description here enter image description here

Я пытался использовать этот код:

if($('*').text() != ''){
    $(this).click(function(){
        $(this).text('Ok!');
    });
}

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

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Я получил помощь на другом сайте: https://qna.habr.com/q/698485

Код, который решает проблему:

$(document).click(function(event) {
    var selection = window.getSelection();
    if(
    selection.focusOffset 
    && selection.focusNode 
    && selection.focusNode.nodeType == 3 
    && selection.focusNode.length !== selection.focusOffset 
    ) selection.focusNode.data = 'OK!';
})
0 голосов
/ 07 января 2020

Вы должны будете выделить каждое слово в отдельный элемент span. Затем нужно просто добавить событие click ко всем диапазонам.

<!DOCTYPE html>
<html>
<head>
  <title>Word Swap</title>
</head>
<body>
  <main>
    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum
    deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non
    provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum
    fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta
    nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus,
    omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis
    debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae
    non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus
    maiores alias consequatur aut perferendis doloribus asperiores repellat.
  </main>
  <script>
   // Get all the text anywhere in the main
   let main = document.querySelector("main");
   let text = main.textContent;

   // Break up the text where there are spaces and turn into an array
   let words = text.split(/\s+/g);

   // wrap each word in its own span
   let wrappedWords = words.map(function(word){
     return "<span>" + word + "</span>";
   });

   // Replace the body text content with the wrapped words
   main.innerHTML = wrappedWords.join(" ");

   // Set up click event on document
   document.addEventListener("click", function(event){
     // Test to see if it was a span that was clicked
     if(event.target.nodeName === "SPAN"){
       // Replace the span contents
       event.target.textContent = "OK!";
     }
   });
 </script>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...