0

電話番号をフォーマットするための独自の jquery プラグインを作成しています。いくつかのデモ データを含むいくつかのスパンを次に示します。

<span class="formatMe">&nbsp;</span><br />
<span class="formatMe">(123)456-7890</span><br />
<span class="formatMe">&nbsp;</span><br />
<span class="formatMe"></span><br />
<span class="formatMe">(123)456-7890</span><br />

私の問題は、を含むスパンで発生します&nbsp;

各要素内の値を .trim() するだけで空白が処理されると思いますが、望ましい結果は何も得られません。

<script>
(function( $ ){
$.fn.voip1Wire = function() {
return this.each(function() {
  var theValue = $(this).html().trim().replace(/ /g,'');
  if (theValue === null || theValue === undefined || theValue == ""){ 
       $(this).html("------"); 
       return true; // break out of the loop
  }

      $(this).html('formatted number to return');

}); // eof .each

  };
})( jQuery );

</script>

やり過ぎかもしれません。.trim() と .replace() を使用していることがわかります。

var theValue = $(this).html().trim().replace(/ /g,'');

私はおそらくjavascript/jqueryを正しく使用していませんが、ここに私が持っているものがあります:

formatted number to return
formatted number to return
formatted number to return
-----------
formatted number to return

1番目と3番目がダッシュを返すと思っていました。だから私は空白のトリミングに困惑しています。誰かが私が間違っていることを見ていますか?

4

4 に答える 4

3

ここでの問題は、文字が HTML に存在する場合に.html()文字を返す&nbsp;ことです。これは空白そのものではありません。

DOM パーサーはその一連の文字を空白として解釈しますが、通常の文字列 (.html()返される文字列) 内の文字は空白とは見なされません。

スパンにテキストのみが含まれていると仮定すると、適切にトリミングされる (s) を取得する.html()ために置き換えることができます。.text()textNode

var theValue = $(this).text().trim();

フィドル


また、@undefined で指摘されているように、ネイティブString.trim()は IE8 以下では実装されていないため、jQuery.trim()これらのバージョンをサポートする場合に推奨されます。

var theValue = $.trim( $(this).text() );

フィドル


正規表現ソリューションに固執したい場合:

var theValue = $(this).html().replace(/^(\s|&nbsp;)+|(\s|&nbsp;)+$/g, '');

フィドル


小さな注意: span 要素は常に( が動作する)if (theValue === "")の文字列を返すため、正規表現の置換後に十分なはずです。 /をチェックする必要はありません。.html().replace()nullundefined

于 2012-10-20T21:21:49.787 に答える
1

.replace(/\s/g,'');を使用して、すべてのスペースを削除してみてください。

于 2012-10-20T21:21:22.053 に答える
0

.text().trim()-そこにhtmlがないと思います

于 2012-10-20T21:23:04.727 に答える
0

jqueryで動作する利用可能なソース/プラグインがすでにある場合に、これを自分でやろうとする特定の理由はありますか?

ここから取得: http://docs.jquery.com/Plugins/Validation/CustomMethods/phoneUS 米国の電話番号の実際の例を次に示します。

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, ""); 
    return this.optional(element) || phone_number.length > 9 &&
        phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

$("#myform").validate({
  rules: {
    field: {
      required: true,
      phoneUS: true
    }
  }
});
于 2012-10-20T21:29:50.003 に答える