Повторите innerHTML.replace - PullRequest
1 голос
/ 25 мая 2011

Я использую приведенный ниже код, чтобы сделать ссылки связанными в надписях WordPress.Например, он успешно превращает http://google.com в google.com .Но когда я помещаю несколько заголовков в заголовок, он меняет только первый.Есть ли способ заставить его повторить действие на всех ссылках?

<script type="text/javascript">
    jQuery().ready(function() {
    jQuery("p.wp-caption-text").each(function(n) {
        this.innerHTML = this.innerHTML.replace(new RegExp(" http://([^ ]*) "), " <a href=\"http://$1\">$1</a> ");
    });
    });
</script>

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

RegExp по умолчанию находит только одно совпадение.

this.innerHTML = this.innerHTML.replace(new RegExp(" http://([^ ]*) ", "g"), " <a href=\"http://$1\">$1</a> ");

Добавление флага "g" выполняет глобальное совпадение.

2 голосов
/ 25 мая 2011

Попробуйте вместо этого:

this.innerHTML = this.innerHTML.replace.replace(/http:\/\/([^ ]*)/g, " <a href=\"http://$1\">$1</a> ");

/ g означает, что это регулярное выражение является глобальным.

2 голосов
/ 25 мая 2011

Незначительное изменение вашего RegExp вызова должно сделать это:

    jQuery().ready(function() {
        jQuery("p.wp-caption-text").each(function(n) {
            $(this).html($(this).html().replace(new RegExp(" http://([^ ]*) ", 'g'), " <a href=\"http://$1\">$1</a> "));
        });
    });

Ключ - аргумент модификатора 'g' - g обозначает global;другими словами: заменить все.

Вот соответствующий справочный материал: http://www.w3schools.com/jsref/jsref_regexp_g.asp

...