Найдите специальные маркеры в последовательности и сделайте что-нибудь с текстом между - PullRequest
1 голос
/ 09 августа 2011

Я хочу сделать что-то похожее на этот шорткод в stackexchange.

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

Я нашел это Найти текст между 2 цитатами с помощью jQuery , но это мало помогает, поскольку я мог только заставить его работать как есть.

Это объясняет немного дальше: http://jsfiddle.net/ALfsT/3/

Я понятия не имею, куда идти с этим.

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Спасибо @Guffa за помощь здесь

http://jsfiddle.net/mplungjan/AkCED/

var res = {
    boldIt:/\*\*(.*?)\*\*/g,
    underlineIt:/\_\_(.*?)\_\_/g
}
var txt = $( "#texts" ).html();
$.each(res, function(type, re) {
  txt = txt.replace( re, '<span class="'+type+'" >$1</span>' );
});
$( "#texts" ).html(txt);

обновление:

теперь нам нужно кодировать такие вещи, как это http://jsfiddle.net/mplungjan/bhTAM/

Вы перешли на класс = тексты, я изменил его обратно на id = тексты, и он работал лучше

var res = {
    boldIt:{re:/\*\*(.*?)\*\*/g,tag:"span"},
    underlineIt:{re:/\_\_(.*?)\_\_/g,tag:"span"},
    italicIt:{re:/\/\/(.*?)\/\//g,tag:"span"},
    titleIt:{re:/\=\=(.*?)\=\=/g,tag:"h1"},
    linkIt:{re:/\#\#(.*?)\:(.*?)\#\#/g, tag:"a"},
    imageIt:{re:/\"\"(.*?)\:(.*?)\"\"/g, tag:"img"}
}
var s = $("#texts").html();    
$.each(res, function(type, obj) {
  if(s) s = s.replace(obj.re,'<'+obj.tag+' class="'+type+'" >$1</'+obj.tag+'>');
});
$("#texts").html(s);
1 голос
/ 09 августа 2011

Вам необходимо экранировать символы *: /\*\*(.*?)\*\*/

Я также предлагаю использовать функцию обратного вызова для переноса текста: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...