2012-12-21 3 views
4

С кодом в качестве основы можно выделить любые подходящие элементы, не используя дополнительный плагин?Как выделить команды RegEx с jQuery?

Я хотел бы добавить style="backgorund: green;" в теги, где были найдены предметы, чтобы я мог их сразу увидеть.

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

+1

Связанный: Я сделал что-то подобное недавно: https://github.com/Ralt/regexfiddle –

+0

Вы хотите добавить стиль в div, имеющий текст, или создать промежуток вокруг найденного текста, чтобы выделить только его? –

+0

@FlorianMargaine Я хочу добавить стиль к элементу, содержащему find, а не создавать вокруг него новый элемент. Просмотрите ответы, которые даны до сих пор, чтобы увидеть, есть ли у меня что-то, с чем я могу работать. – spiel

ответ

-1

Я изменил вокруг моего кода немного и решил так:

function finder(items){ 
    var needed = [ 
     /* items */ 
    ]; 
    var reg = new RegExp(needed.join("|"), "i"); 
    var found = (textToCheck.match(reg) != null); 
    var foundItem = textToCheck.match(reg); 
    return [found,foundItem]; 
} 

var found = finder(document.body.innerHTML)[0]; 
var foundItem = finder(document.body.innerHTML)[1]; 

if(found === true) { 
    $('div:contains('+foundItem+')').css("background", "greenyellow"); 
} 
0

Зачем изобретать колесо? Для этого есть готовые решения. Например, попробуйте this plugin. Вот плагин source code. Это буквально несколько строк кода, поэтому, если вам действительно нравится писать свой собственный механизм подсветки, вы можете проанализировать его, чтобы увидеть, как выполняется подсветка.

+0

Я уже рассмотрел довольно много плагинов раньше, и у меня не было того, что мне было нужно, поэтому я попросил прямой код. Посмотрел источник, с которым вы связались, не совсем то, что я искал. Большое спасибо за попытку помочь! – spiel

1

Вы можете попробовать что-то с заменить()

for (var i = 0; i < needed.length; i++) { 
    var word = needed[i]; 
    document.body.innerHTML = document.body.innerHTML.replace(word, '<span style="background: #00ff00">' + word + '</span>'); 
} 

Попробуйте здесь: http://jsfiddle.net/4kjuw/

+0

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

1

Использование innerHTML злой, поскольку он будет заменять события и запускает создание DOM снова и снова. Я бы рекомендовал использовать существующий плагин, так как есть больше ошибок, с которыми вы столкнулись. Посмотрите на mark.js, чтобы выделить пользовательские регулярные выражения.

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