직접 JavaScript를 사용하여 동적으로로드 된 문자열을 자르고 싶습니다. URL이므로 공백이 없으며 단어 경계, 문자 만 신경 쓰지 않습니다.
내가 가진 것은 다음과 같습니다.
var pathname = document.referrer; //wont work if accessing file:// paths
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
답변
부분 문자열 방법을 사용하십시오 .
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>"
답변
예, 부분 문자열. Math.min을 수행 할 필요는 없습니다. 문자열 길이보다 긴 색인을 가진 부분 문자열은 원래 길이로 끝납니다.
그러나!
document.getElementById("foo").innerHTML = "<a href='" + pathname +"'>" + pathname +"</a>"
이것은 실수입니다. document.referrer에 아포스트로피가 있으면 어떻게해야합니까? 또는 HTML에서 특별한 의미를 가진 다양한 다른 문자들. 최악의 경우 리퍼러의 공격자 코드가 JavaScript를 페이지에 삽입 할 수 있는데, 이는 XSS 보안 취약점입니다.
이 문제를 막기 위해 경로 이름의 문자를 수동으로 벗어날 수는 있지만 약간의 고통이 있습니다. innerHTML 문자열로 처리하는 것보다 DOM 메소드를 사용하는 것이 좋습니다.
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);
}
답변
Sugar.js 에 언급 할 것이라고 생각했습니다 . 그것은 꽤 똑똑한 절단 방법을 가지고 있습니다.
로부터 문서 :
문자열을 자릅니다. split이 true가 아닌 경우 잘림은 단어를 분할하지 않고 잘림이 발생한 단어를 버립니다.
예:
'just sittin on the dock of the bay'.truncate(20)
산출:
just sitting on...
답변
다음 코드는 문자열을 자르고 단어를 분리하지 않고 잘림이 발생한 단어를 버립니다. 완전히 Sugar.js 소스를 기반으로합니다.
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('');
}
답변
사용할 수있는 방법은 다음과 같습니다. 이것은 FreeCodeCamp Challenges 중 하나에 대한 답변입니다.
function truncateString(str, num) {
if (str.length > num) {
return str.slice(0, num) + "...";}
else {
return str;}}
답변
ES6 버전 업데이트
const truncateString = (string, maxLength = 50) => {
if (!string) return null;
if (string.length <= maxLength) return string;
return `${string.substring(0, maxLength)}...`;
};
truncateString('what up', 4); // returns 'what...'
답변
예, substring
훌륭하게 작동합니다.
stringTruncate('Hello world', 5); //output "Hello..."
stringTruncate('Hello world', 20);//output "Hello world"
var stringTruncate = function(str, length){
var dots = str.length > length ? '...' : '';
return str.substring(0, length)+dots;
};