2011-12-09 19 views
1

最後の単語を、最初の単語を除くスパンタグを含む文字列にラップすることはできますか?だから、たとえばだろう:jQueryで最初の単語を除くスパンタグにテキストをラップする方法は?

var string = 'My super text'; 

My <span>super text</span> 

になり、私はこれを持っている:

それは少なくとも二つのではなく、を持っている場合はspanタグで最後の単語をラップ
var text= string.split(" "); 

// drop the last word and store it in a variable 
var last = text.pop(); 

// join the text back and if it has more than 1 word add the span tag 
// to the last word 
if (text.length > 0) { 
    return text.join(" ") + " <span>" + last + "</span>"; 
} else { 
    return "<span>" + text.join(" ") + last + "</span>"; 
} 

それを変更する方法を確認してください。

ありがとうございます!

答えて

2

最後の単語を返すtext.pop()の代わりに、最初の単語を返すtext.shift()を使用するだけで済みます。そうすれば、これをはるかに簡単に行うことができます。

var text= string.split(" "); 

// get the first word and store it in a variable 
var first = text.shift(); 

// join the text back and if it has more than 1 word add the span tag 
// to the last word 
if (text.length > 0) { 
    return first + " <span>" + text.join(" ") + "</span>"; 
} else { 
    return "<span>" + first + "</span>"; 
} 
+0

素晴らしい感謝! – javiervd

1
var space = string.indexOf(' '); 

if (space !== -1) { 
    return string.slice(0,space) + " <span>" + string.slice(space) + "</span>"; 
} else { 
    return "<span>" + string + "</span>"; 
} 
2

あなたは正規表現でそれを行うことができます。

text = text.replace(/\s(.*)$/, ' <span>$1</span>'); 

しかし、あなたはおそらく

$('body').contents().filter(function() { 
    return this.nodeType == 3; 
}).each(function() { 
    var node = this; 
    // Normalise node. 
    node.data = $.trim(node.data); 

    node.data.replace(/\s+(.*)\s*$/, function(all, match, offset) { 
     var chunk = node.splitText(offset); 
     chunk.parentNode.removeChild(chunk); 
     var span = document.createElement('span'); 
     span.appendChild(document.createTextNode(' ' + match)); 
     node.parentNode.appendChild(span); 
    }); 
}); 

jsFiddle ...再帰関数に次のように変わります。

これにより、テキストノードを変更し、span要素を挿入することができます(シリアル化されたHTMLを邪魔することなく)。

1

テキストを分割する必要はありません。スペースがあるかどうかを確認して、そこにスパンを挿入してください。

このコードは、最初のスペースの後にスパンを挿入し、そして、スパンは、文字列の先頭に置かれるにはスペース(IDX == -1)が存在しない場合:

var idx = string.indexOf(' '); 
return string.substr(0, idx + 1) + "<span>" + string.substr(idx + 1) + "</span>";