2012-03-19 2 views
1

Я пытаюсь создать SEO-дружественную ссылку со входа в текстовом поле ввода. Я делаю это в случае размытия, когда курсор покидает введенный вход. Я могу получить текст на входе, чтобы появиться на нужном входе (для ссылки), но моя ссылка не переносится, а специальные символы не заменяются дефисом. Я пытаюсь выполнить замену глобальной строки, но выражение ожидает строку, а не переменную. По крайней мере, из того, что я могу сказать. Кроме того, я не могу найти лучший способ сопоставить список специальных символов, кроме массива и цикла. Может кто-нибудь помочь? Мое желание создать ссылку вроде этого: http://domain.com/this-is-my-link. Вот мой код:jQuery/JS: Как создать SEO-дружественную ссылку

$('#title').blur(function() { 
     var hyphenated; 
     hyphenated = urlTitle($(this).val());    
     $('#link').val(hyphenated);  
}); 


function urlTitle(text) {  
    var characters = [' ', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '+', '=', '_', '{', '}', '[', ']', '|', '/', '<', '>', ',', '.', '?', '--']; 

    for (var i = 0; i < characters.length; i++) { 
     var char = String(characters[i]); 
     text = text.replace(/char/g, '-'); 

}   
    text = text.toLowerCase(); 
    return text; 
} 
+0

Являются ли поисковые системы даже выполнением кода на стороне клиента? – Amberlamps

+0

Я создаю инструмент, чтобы наши дилеры могли использовать нашу CMS для создания SEO-дружественных ссылок на их статьи. Ссылка не будет выполнена на стороне клиента – sehummel

ответ

3

Проблема заключается в вашей отводящей функции:

text = text.replace(/char/g, '-'); 

Это буквально соответствует "символ". Поэтому, если вы его дадите I'm building a string out of chars, it will returni'm building a string out of -s.

Если вы хотите динамически выражать выражение, используя переменную, вам нужно построить его с помощью строки и RegExp constructor.

text = text.replace(new RegExp("\\" + char, "g"), '-'); 

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

Live example

+0

Perfect. Спасибо, Xeon06. – sehummel

+0

Как удалить любые конечные дефисы? – sehummel

+0

@ shummel7845 Вы можете использовать [эти функции отделки] (http://www.webtoolkit.info/javascript-trim.html). [Живой пример] (http://jsfiddle.net/pNcVc/2/) –

0

Вы не можете использовать имена переменных, как, что в регулярных выражениях литералов (/ символ /). Либо используйте объект RegExp с правильно экранированными значениями, либо создайте единственный литерал регулярного выражения, соответствующий всем символам, которые вы хотите заменить.

0

У меня есть версия, которая работает что-то вроде этого:

function urlTitle(text) { 
    var removeRe = /[^\w\s]/ig, 
     spacesRe = /[\s]/ig; 
    return text.toLowerCase().replace(removeChars, '').replace(spaceChars, '-'); 
} 

Это имеет слабость, что двойные пространства превратились в двойной «-'s. Это можно улучшить с помощью другого регулярного выражения.

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