Усечь строку прямо JavaScript
Я хотел бы усечь динамически загруженную строку, используя прямой JavaScript. Это url-адрес, поэтому нет пробелов, и я, очевидно, не забочусь о границах слов, просто символы.
вот что я получил:
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
5 ответов:
использовать подстрока способ:
var length = 3; var myString = "ABCDEFG"; var myTruncatedString = myString.substring(0,length); // The value of myTruncatedString is "ABC"
Так что в вашем случае:
var length = 3; // set to the number of characters you want to keep var pathname = document.referrer; var trimmedPathname = pathname.substring(0, Math.min(length,pathname.length)); document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + trimmedPathname + "</a>"
да, подстроки. Вам не нужно делать математику.min; подстрока с более длинным индексом, чем длина строки, заканчивается на исходной длине.
но!
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
Это ошибка. Что делать, если документ.у реферера был Апостроф? Или различные другие символы, которые имеют особое значение в HTML. В худшем случае код злоумышленника в реферере может внедрить JavaScript на вашу страницу, что является дырой безопасности XSS.
в то время как можно избежать символы в pathname вручную, чтобы остановить это происходит, это немного больно. Вам лучше использовать методы DOM, чем возиться со строками innerHTML.
if (document.referrer) { var trimmed= document.referrer.substring(0, 64); var link= document.createElement('a'); link.href= document.referrer; link.appendChild(document.createTextNode(trimmed)); document.getElementById('foo').appendChild(link); }
думал, что дам сахар.js упоминания. Он имеет метод усечения, который довольно умен.
С документация:
Усекает строку. Если split не является истинным, усечение не будет разделять слова, а вместо этого отбросьте слово, в котором произошло усечение.пример:
'just sittin on the dock of the bay'.truncate(20)
выход:
just sitting on...
следующий код усекает строку и не разбивает слова, а вместо этого отбрасывает слово, где произошло усечение. Полностью на основе сахара.Яш источник.
function truncateOnWord(str, limit) { var trimmable = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u2028\u2029\u3000\uFEFF'; var reg = new RegExp('(?=[' + trimmable + '])'); var words = str.split(reg); var count = 0; return words.filter(function(word) { count += word.length; return count <= limit; }).join(''); }