Показать букмарклет только для выделенного div - PullRequest
1 голос
/ 31 марта 2010

Я ищу, чтобы выбрать текст из div, затем нажмите на букмарклет, который удаляет все части HTML в теле, кроме div, где выделен текст

возможно, jquery может помочь с чем-то вроде:

javascript:var%20s=document.createElement('script');s.setAttribute('src',%20'http://jquery.com/src/jquery-latest.js');document.body.appendChild(s);s.onload=function(){/*the code*/};void(s);

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Предполагая, что выбранный вами текст появится на странице ровно один раз, это должно сработать. Если это появляется несколько раз, это должно показать последний div на странице, которая содержит выделенный текст.

более читабельно

function sel() {
    if (window.getSelection) {
        return window.getSelection().toString();
    } else if (document.getSelection) {
        return document.getSelection();
    } else if (document.selection) {
        return document.selection.createRange().text;
    }
}
var s = document.createElement('script');
s.setAttribute('src', 'http://jquery.com/src/jquery-latest.js');
document.body.appendChild(s);
s.onload = function () {
    var x = $(":contains('" + sel() + "')").last().parents("div").eq(0);
    $("body").empty().append(x);
};
void(s);

как однострочник

javascript:function sel(){if(window.getSelection) return window.getSelection().toString();else if(document.getSelection) return document.getSelection();else if(document.selection) return document.selection.createRange().text;} var s=document.createElement('script');s.setAttribute('src','http://jquery.com/src/jquery-latest.js');document.body.appendChild(s);s.onload=function(){var x=$(":contains('"+sel()+"')").last().parents("div").eq(0);$("body").empty().append(x);};void(s);

Если вы также хотите, чтобы стили CSS исчезли, вы должны очистить <head> тоже

0 голосов
/ 31 марта 2010

Если я вас правильно понял, вы смотрите на что-то вроде этого.

HTML

<body>
  <div class="bookmarklet">
    bookmarklet Text
  </div>
  <div>
    <div>
     <div class="bookmarklet">
      bookmarklet Text
     </div>
     <div>Usless</div>
     <div>Usless</div>
    </div>
    <div>Usless</div>
  </div>
  <script>
    $('bookmarklet').unbind('click').bind('click',function(){
      var text = $(this).text();
      $('body').html('').append(text);
    })
  </script>
</body>

Теперь это будет работать, если вы поместили тег script для jquery в заголовок, если не знаете, как тогда комментировать ниже.

...