htmlと非htmlを含む文字列を2つの文字列に分割しようとしています。
私のJavaScript文字列は次のとおりです。
<span>1x</span> Front-line zero tolerance productivity
これを2つの変数に分けてほしい
var quantity = "1x";
var name = "Front-line zero tolerance productivity";
htmlと非htmlを含む文字列を2つの文字列に分割しようとしています。
私のJavaScript文字列は次のとおりです。
<span>1x</span> Front-line zero tolerance productivity
これを2つの変数に分けてほしい
var quantity = "1x";
var name = "Front-line zero tolerance productivity";
<span>
または</span>
タグが見つかったときに分割します。
string = "<span>1x</span> Front-line zero tolerance productivity"
tokens = string.split(/<\/?span>/); // returns ["", "1x", " Front-line zero tolerance productivity"]
var quantity = tokens[1] // "1x"
var name = tokens[2]; // "Front-line zero tolerance productivity"
最も簡単な方法は、常にこのタイプのマークアップがある場合、jQuerycontents()
を使用することです。
HTML
<div id="split-me">
<span>1x</span> Front-line zero tolerance productivity
</div>
jQuery
var $contents = $("#split-me").contents();
var quantity = $contents.eq(1).text();
var name = $contents.eq(2).text();
<span>1x</span> Front-line zero tolerance productivity
が以下のようにdiv内にラップされていると仮定すると、
<div id="test">
<span>1x</span> Front-line zero tolerance productivity
</div>
JS:
var $clonedTest = $('#test').clone();
var $span = $clonedTest.find('span');
var quality = $span.text();
$span.remove();
var name = $.trim($clonedTest.text());
デモ:http: //jsfiddle.net/skram/Agfyk/2/
文字列の形式は変更されないため、最初のスペースで分割して2つの部分を取得できます。次に、最初に返された要素からタグを削除し、後半の構造を保持します。
var str = "<span>1x</span> Front-line zero tolerance productivity";
var ndx = str.indexOf(" ");
var rst = []; // Array of results
rst.push( str.substr( 0,ndx ).replace(/<\/?.+?>/g,"") );
rst.push( str.substr( ndx+1 ) );
その結果、次の配列になります。
["1x", "Front-line zero tolerance productivity"]
フィドル: http: //jsfiddle.net/jonathansampson/dBTKZ/
これはあまり洗練されていないかもしれませんが.replace()
、次のように2番目の変数にjavascript関数を使用できます。
$(document).ready(function(){
$('#outp').html('first: ' + $('#inp span').html() + '<br/>' +
'second: ' + $('#inp').html().replace($('#inp span').html(),''));
});
必要なすべてのサブテキストブロックを取得するための、より動的でモジュール式の関数を次に示します。
jQuery.fn.extend({
texts: function() {
var texts = [];
var blocks = this.contents();
$.each(blocks, function(i, block) {
if(block.nodeName === '#text') {
var data = $.trim(block.data);
data && texts.push(data);
} else {
texts = jQuery.merge(texts, $(block).texts());
}
});
return texts;
}
});
$(function() {
console.debug($('<span><span>1x</span> Front-line zero tolerance productivity</span>').texts());
});
<div class="container">
<span>1x</span> Front-line zero tolerance productivity
</div>
<script type="text/javascript">
var matches = $('.container').html().match(/<span>(.*)<\/span> ?(.*)/);
var spanText = matches[1]; // 1x
var textNode = matches[2]; // Front-line zero tolerance productivity
</script>