вставка строки в строку
необходимо автоматически добавить в какойто текст(строку), конструкцию(строку) " ...[end] " после n-ого слова (в примере это 5 слово).
допустим есть текст: aaa bbb ccc [a url="http://vk.com/bpystep"]123[/a] [img url='http://cs4578.userapi.com/a_0b40d4e9.jpg' pos='center'] и скрипт: var list = node.value.split(" "); //node - это обект TextArea var pos = node.value.indexOf(list[4]); for (var i=0; i<list.length; i++) { if (list[i] == '...[end]') { // проверяет есть ли уже в тексте " ...[end] " var flag = true; } } if (!flag) { // ну и если нет var str1 = node.value.substr(0,pos); var str2 = node.value.substr(pos); node.value = str1+' ...[end] '+str2; // добавляет " ...[end] " } проблема в том, что скрипт разбивает как слова(по принципу разделителя "пробел"), так и bb-code и может разбить [a url="http://vk.com/"]123[/a] на "[a" и "url="http://vk.com/"]123[/a]". Вопрос: как бы нам заставить скрипт понимать bb-code, содержащие проблемы как 1 слово? |
сделал, но может быть какието другие способы? (если захочется добавить какой-нибудь другой bb-code)
var search = new Array('[a url=','[img url=','\' pos'); var replace = new Array('[a_url=','[img_url=','\'_pos'); for (var i=0; i<search.length; i++) { node.value = node.value.replace(search[i],replace[i]); } var list = node.value.split(" "); var pos = node.value.indexOf(list[6]); for (var i=0; i<list.length; i++) { if (list[i] == '...[end]') { var flag = true; } } if (!flag) { var str1 = node.value.substr(0,pos); var str2 = node.value.substr(pos); node.value = str1+' ...[end] '+str2; for (var j=0; j<search.length; j++) { node.value = node.value.replace(replace[j],search[j]); } } |
не ну разве это нормально, я создал тему. никто в ней не отписался, кроме меня. но в репу я получил -200 очей от кого-то. ну и нахера?
п.с. если вы знаете больше, чем я, дак вы поделитесь опытом, а не занимайтесь херней типа "минусну ка я ему". |
Вот как по мне чуть более элегантный метод, что ли.
String.prototype.addSubStr = function(pos,str){ var beforeSubStr = this.substring(0,pos); var afterSubStr = this.substring(pos,this.length); return beforeSubStr+str+afterSubStr; } А если нужно заменить, то объединить с вот таким методом String.prototype.removeFromTo = function(pos,end){ var beforeSubStr = this.substring(0,pos); var afterSubStr = this.substring(end,this.length); return beforeSubStr+afterSubStr; } PS ко всему прочему, по-моему, обращение к строке как к массиву через квадратные скобки не воспринимается старыми браузерами, так что этот метод еще и кроссплатформенней. |
Часовой пояс GMT +3, время: 23:52. |