2011-10-20 22 views
3

PHP strtok()に相当するjavascriptはありますか? PHPでは、私はPHPのstrtok()のjavascriptまたはjquery相当ですか?

$sub = strtok($string, ':'); 

Thanks to Phil's answer for that

を使用すると思いますが、私はJavaScriptで同じことを行う必要があります。

私はこのような値が含まれている選択リストがあります:

<select id="myFonts"> 
    <option value='Leckerli One'>Leckerli One</option> 
    <option value='Lekton:regular,italic,bold'>Lekton (plus italic and bold)</option> 
    <option value='OFL Sorts Mill Goudy TT:regular,italic'>OFL Sorts Mill Goudy TT (plus italic)</option> 
</select> 

とjQuery変更イベントでは、私が「値」フィールドを抽出する必要があります。しかし、値のフィールドにコロンが含まれている場合は、コロンの前に文字列の内容をプルし、その後に何も返さないといけません。

例えば、上記の私の例では、私は値が返さ必要があります。

Leckerli一つ Lekton OFLソートミルGoudy TT

はここ(現在、私のjQueryの値はコロンが含まれている場合、正常に動作しません。そして追加のプロパティは):1、または全体の値がある場合に存在しない場合

$('#myFonts').change 
(
    function() 
    { 
    var myFont = $('#myFonts :selected').val(); 
    $('#fontPreviewSrc').attr('href','http://fonts.googleapis.com/css?family='+myFont); 
    $('.fontPreview').attr('style','font-family:'+myFont+';font-style:normal;font-size:2em;padding-top:10px;white-space:nowrap'); 
    } 
); 
+3

あなたは 'split()' – Amit

答えて

6

用途:あなたはsplit方法を探している

$('#myFonts :selected').val().split(':')[0] 
2

substrまたはsliceindexOfを使用して

/** 
* @param {string} s  the string to search in 
* @param {string} chars the chars to search for 
* @param {boolean=} rtl option to parse from right to left 
* @return {string} 
* @example tok('example.com?q=value#frag', '?#'); // 'example.com' 
* @example tok('example.com?q=value#frag', '?#', true); // 'frag' 
*/ 
function tok (s, chars, rtl) { 
    var n, i = chars.length; 
    rtl = true === rtl; 
    while (i--) { 
     n = s.indexOf(chars[i]); 
     s = n < 0 ? s : rtl 
      ? s.substr(++n) 
      : s.substr(0, n); 
    } 
    return s; 
} 

:1に長さを制限することによって、あなたはコロンの前に複数の文字を同じようにstrtok()が行うPHPをサポートしています

var beforeColon = value.split(':', 1)[0] 
4

ここでのネイティブJavaScriptのソリューションを値を抽出することができますpopまたはshiftでsplitを使用するよりも速かった。 jsperf.com/tok

+1

super good jobを試してみましたか?特にrtl。 –

+0

@ user1869322ありがとう=] – ryanve

+1

...コピーしてクレジットしました。 –

1

上記のように、シングルチャイルドデリミターの分割を使用してください。私がこれを書いた区切り文字、複数の文字については :関連し

function strtok(src, delim){ 
    delim_escaped = new RegExp('[' + delim.replace(/[\[\]\(\)\*\+\?\.\\\^\$\|\#\-\{\}\/]/g, "\\$&") + ']', 'g'); 
    return src.replace(delim_escaped, delim[0]).split(delim[0]); 
} 
0

は、あなたがthese benchmarksに興味があるかもしれません。 slicesubstr、およびsubstringのオプションは、セパレータが存在することが確認できる場合にのみ機能します。区切り記号がない場合(最初の例のように)、他のユーザーの示唆通りにsplitのバージョンを使用してください。

関連する問題