2010-10-04 5 views
4

Мой JS код:Странное поведение выбора


    function getSelectedText(){ 
     if(window.getSelection){ 
      select = window.getSelection().getRangeAt(0); 
        var st_span = select.startContainer.parentNode.getAttribute("id").split("_")[1]; 
        var end_span = select.endContainer.parentNode.getAttribute("id").split("_")[1]; 
        console.log(select.endContainer); 
        var ret_urn=[st_span,end_span]; 
        return ret_urn 
     } 
     else if(document.getSelection){ 
      return document.getSelection(); 
     } 

    } 
    $(document).ready(function() { 
     $("div#check_button button").click(function() { 
         var loc = getSelectedText(); 
         console.log(loc); 
         }); 
    }); 
    

Вот весь мой HTML-файл: http://pastebin.com/acdiU623

Это трудно объяснить, так что я подготовил короткий фильм: http://www.youtube.com/watch?v=tVk4K70JO80

В несколько слов: когда я нажимаю левую кнопку мыши и удерживаю ее, чтобы выбрать текст/цифры и начать выбор из половины буквы/числа, хотя эта буква/номер не подсвечивается, она добавляется к выбору. Я должен начать точно выбирать. Это нормально с широкими буквами, но с такими буквами, как i, j или l.

Это второй пример моего фильма. Я нажал левую кнопку на 3/4 длины номера 5, хотя 5 не подсвечивается, он выбран.

Протестировано на FF и Opera.

+1

Интересный вопрос, я не могу * помочь * с ним, но +1 для меня интересный. =) –

+0

aha это средний. но то же самое здесь. – Pavan

ответ

1

Хорошо, просто попробовал это демо. и он работает безупречно. он даже работает на firefox. Просто проверенная опера и сафари, и она работает на обоих из них. Даже если я выбираю половину буквы или цифры, он просто возвращает выделенный текст, который ожидается, когда вы сделаете выбор.

попробуйте на новой веб-странице, хотя для тестирования. затем, когда он работает, и вы удовлетворены результатами, затем приступайте к внесению изменений в существующую страницу.

Его намного проще, чем ваш код. Это скрипт, кросс-браузер, чтобы получить текст, выбранный пользователем

<script language=javascript> 
function getSelText() 
{ 
    var txt = ''; 
    if (window.getSelection) 
    { 
     txt = window.getSelection(); 
      } 
    else if (document.getSelection) 
    { 
     txt = document.getSelection(); 
      } 
    else if (document.selection) 
    { 
     txt = document.selection.createRange().text; 
      } 
    else return; 
document.aform.selectedtext.value = txt; 
} 
</script> 
<input type="button" value="Get selection" onmousedown="getSelText()"> 
<form name=aform > 
<textarea name="selectedtext" rows="5" cols="20"></textarea> 
</form> 

http://www.codetoad.com/javascript_get_selected_text.asp

Надежда это помогает.

PK

+1

'window.getSelection()' и 'document.getSelection()' оба возвращают объект 'Selection', а не строку. Убедитесь, что вы вызываете 'toString()' на этом объекте, либо явно ('txt = window.getSelection(). ToString()'), либо неявно ('txt =" "+ window.getSelection()'). –

+0

thats правый. вам нужно вызвать toString(), чтобы получить текст. так что вы можете сделать то, что сказал Тим. Большое спасибо за это добавление. – Pavan

+0

Thx для идеи! Но мне нужно получить значение атрибута id span, который находится в начале и конце выделения. Я использую span, потому что мне нужны стили. Я добавил console.log (txt.anchorNode.parentNode.getAttribute («id»)) к вашему js, insted of document.aform. [...]. Проблема все еще существует. Movie: http://www.youtube.com/watch?v=CLbKmscGZ2I&videoformat=480p. Я думаю, что Тим Вниз нашел причину. Но знаете ли вы решение ... :)? – domi

0

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

<span>5</span><span>|6</span><span>7|</span><span>8</span> 

и

<span>5|</span><span>6</span><span>7</span><span>|8</span> 

В обоих случаях, вызывая toString() на выбор даст вам тот же результат ("67").

+0

Похоже, что это и есть причина такого поведения. Вы знаете, как с этим справиться? – domi

+0

Что вы на самом деле пытаетесь достичь? –

+0

Каждый персонаж находится внутри отдельного пролета. Каждый диапазон имеет разный id. Я хотел бы извлечь этот идентификатор из диапазона, который находится в начале и в конце выбора. Мне нужны разные идентификаторы, потому что я должен идентифицировать каждый промежуток. – domi

Смежные вопросы