JQuery захватить значение слова

Есть ли способ получить значение слова с помощью jquery или javascript? в примере:

Поиск: Котировки месяца на май

Когда я нажимаю "Поиск", "Цитаты" или любое другое слово, я предупреждаю текст этого слова?

Обновить:

Вот что я имел в виду:

http://jsfiddle.net/BE68L/

Есть ли способ получить текстовое значение, не заключая его в какой-либо элемент HTML?

2 ответа

Вы не можете сделать это, не оборачивая это в узлы HTML. Вы можете применить магию Javascript к "развернутому тексту", что в основном означает Textnode, Это может выглядеть так:

$('#foo').contents().each(function(_, node) {
    var nodelist = node.textContent.split(/\s/).map(function( word ) {
        return $('<span>', {
            text: word + ' ',
            click: function() {
                alert( $(this).text() );
            }
        }).get(0);
    });

    $('#foo').empty().append(nodelist);
});

демо: http://jsfiddle.net/LFCWp/

Я только что записал это. Потенциал оптимизации по-прежнему существует, но он должен дать вам базовое представление о том, как его реализовать.

Чтобы найти конкретные слова в длинных абзацах, вам нужно создать объекты Range и TextRange, чтобы найти координаты конкретных слов в абзаце. После того, как вы сопоставили координаты для каждого слова, вы можете сопоставить координаты события щелчка окна со словом, которое находится в пределах диапазона.

Вопрос в позиции Получение текстового узла DOM имеет некоторые сходства с тем, что вы ищете.

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

отредактируйте для браузеров mozilla / webkit, вы можете сделать это следующим образом:

$(document).ready(function() {
    $("body").click(function(){
         var s = window.getSelection();
        s.modify('extend','backward','word');        
        var b = s.toString();

        s.modify('extend','forward','word');
        var a = s.toString();
        s.modify('move','forward','character');
         alert(b+a);

    });
});

пример: http://jsfiddle.net/niklasvh/rD2uE/

Это не работает в IE <= 8, однако, вам, вероятно, нужно будет принять другое решение, используя выбор IE.

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