2009-04-07 2 views
1

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

Например - Поиск весь документ для текста «целевой частоты сердечных сокращений» и превратить его в

<a href="jvscrt:popup('heartrate.cfm')">target heart rate</a> 

Любые идеи?

спасибо! Chris

+1

Аналогичный вопрос http://stackoverflow.com/questions/247479/jquery-text-to-link-script – TStamper

ответ

0

Вам нужно:

  • Есть правило преобразования - то есть "текст для преобразования" - URL -> "convert.cfm". Вы можете добиться этого с помощью простого массива хэшей.

  • Теперь вам нужно найти текст(), содержащийся внутри всех соответствующих элементов DOM. Если вы его найдете, вам нужно разделить содержимое на 3 части: до и после текста + самого текста.

  • Теперь создайте якорь и соедините три части вместе и замените старый контент.

Вот как, например, текст высокоголистника выполняется в большинстве сценариев на стороне клитора.

Поскольку вы просили только идея, я оставлю удовольствие кодирования для себя;)

+0

Я надеялся на что-то большее, чем идею. У меня была идея - я просто не знаю, с чего начать в jQuery, чтобы искать текст. И теперь, когда вы так разбились, я не знаю, как заменить контент. Но я полагаю, что могу найти хорошую функцию, называемую заменой, и посмотреть, что я получаю. :) thx – 2009-04-07 19:42:21

+0

Вы можете заменить содержимое .text() или .html(), в зависимости от того, содержат ли ваше содержимое теги HTML или нет , Сначала получите содержимое с текстом() (var text = element.text()), затем разделите и соедините с помощью стандартных функций JavaScript, а затем вернитесь с помощью element.text (newText). Надеюсь, что это поможет :) – Seb

0

Используйте метод найти вместе с содержит. Вероятно, что-то вроде

$("p").find(":contains('target heart rate')") 
     .wrapInner($("<a href="jvscrt:popup('heartrate.cfm')"></a>")); 

или что-то в этом роде.

Я мог быть совершенно неправ. Проверка http://docs.jquery.com

+0

Это интересно. Я пытаюсь понять это, но похоже, что это заменит ВСЕ содержимое в теге p. К сожалению, я не могу этого сделать. Но, возможно, у меня могут быть введены пользователи целевого сердечного ритма и отредактируйте это. Текст вытягивается из db, поэтому у меня нет реального контроля над ним. – 2009-04-07 19:52:26

2

jQuery wrap функция может быть?

Также рассмотрите text highlight plugin, которые содержат ключевые ключевые слова. вместо выделения вы могли бы создавать ссылки из них. Более конкретно следующие строки:

var spannode = document.createElement('span'); 
spannode.className = 'highlight'; 
// change the above to create an anchor and add href etc 
+0

Это не поможет, он заменит весь текст. – cgp

4

Это близко:

var findIt = 'Javascript'; 

$.expr[":"].containsNoCase = function(el, i, m) { 
    var search = m[3]; 
    if (!search) return false; 
    // we'll use text to find what we want... 
    return eval("/" + search + "/ig").test($(el).text()); 
}; 


$("p:containsNoCase('"+ findIt +"')").each(function() { 
    // and then html when we are ready to replace 
    var ht = $(this).html(); 
    var pos= ht.indexOf(findIt); 
    var start = ht.substring(0, pos); 
    var end = ht.substring(pos+findIt.length); 

    $(this).html(
     start 
     +'<a href="javascript:alert(\'heartrate.cfm\')">'+findIt+'</a>'+end); 

}); 

Но то, что вы ищете является жесткая вещь, чтобы обеспечить. Вы хотите искать только текст элементов, но вам нужно обновить содержимое HTML элемента, где он был найден (чтобы добавить ссылки). Когда вы вернетесь и используете html() для обновления элемента, вы в конечном итоге потенциально замените то, что не хотите.

Например, это хорошо:

<p>Hey, Javascript is fun.</p> 

Где, как это имеет проблемы:

<p><img src="something/Javascript.png">Whee, yaa Javascript</p> 

Текст в ГКЗ изображения заменяется errantly. Если есть способ найти позицию совпадающего текста внутри элемента, не окруженного тегом или внутри него, его можно будет заменить чисто.Конечно, вы можете использовать text(), но тогда вы не можете использовать какой-либо HTML в том, что вы добавляете обратно :(Возможно, я вернусь и посмотрю, есть ли у кого-нибудь еще что-нибудь предложить.

+0

Это было очень полезно и интересно. Я не уверен, что некоторые из них делают, но я, кажется, получаю большую часть этого. Я полностью понимаю проблему, заменяя неправильную вещь, но в этом случае я не могу предвидеть каких-либо недоразумений в самом тексте. большое спасибо! Я дам вам знать, как это работает. – 2009-04-08 09:31:28

2

I ' м такой гомер:..

Text highlighting plugin for jQuery

Вы, вероятно, можете использовать это, чтобы получить работу просто переодеть обертку с якорем (ваша ссылка) элементом

0

Просто обнаружил интересный метод, который. решает эту проблему довольно чисто:

range.surroundContents

Я натолкнулся на это, читая о Selection object.

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