2011-02-10 6 views
0

私のグーグルのスキルは私に失敗しています。LinqのようなjQuery?

私は、Linqと非常によく似た方法でjQueryを書くことができると私は理解しています。私はシンタックスでは必ずしも意味がありませんが、インライン/匿名関数を使用して定義されています。しかし、私はそこに持っていく方法を理解していません。

私は、TextAreaを使用してページを作成しました。改行を挿入すると、TextAreaの高さが高くなります(つまり、rows=10など)。だから私は、次のスクリプトでこれを行うにはしたいと思います:私は、LINQの風の方法でこれを行うには引き続きどこ

<script language="javascript" type="text/javascript"> 
     $(document).ready(function() { 
      $(#mytxt).keypress(function() { 
       $(this).attr(rows, $(this).val().select(function (x) { x == '\n'}).count()); 
      }); 
     }); 
</script> 

は、どのように私はこれを行うことができますか?私はjavascript(正規表現、区切り文字で文字列を分割するなど)の中でこれを他の多くの方法で行うことができることを知っていますが、私はこれをLinqのようにしたいと思います。また、私はthird-party libraries/pluginsを使ってこれを手助けしたくありません - 私はjQueryの標準であるものを探しています。繰り返しますが、正確な構文は、私がLinqのようになりたいものではありません。

+1

ない、あなたが求めているものを完全に確認を使用傾けます。これらの関数は、javascriptを使用してできるだけ匿名で扱います。 – Mig

+0

私は '$(this).val()。select(function(x){x == '\ n'})。count()'を何に置き換えるべきかを知りたいです。そのjQueryコードは動作しませんが、私はそれが 'mytxt'テキストエリアのテキスト内のnewLinesの数を数えることに近いと信じています。 – Jaxidian

+0

私はあなたの思考がlamduages両方のlanaguagesが – mozillanerd

答えて

4

あなたは何とか正しいです。 LINQはIQueryable型で動作しますが、jQueryはjQueryで動作します:)。 IQueryableは、データの観点から、jQueryオブジェクトよりはるかに抽象的ですが。 しかし、あなたは、jQuery以外のデータが存在するという概念を誤解していました。 jQueryオブジェクトはDOMオブジェクトの周りを回転し、それらのオブジェクトでのみ動作します。値は渡されて投げられるかもしれませんが、DOMがあるか、jQueryが無意味です。比較するために、IQueryableは、データ、値、またはオブジェクトを操作するように作られました。これらはまったく異なる2つの概念です。これらの概念を扱う際には、同様の原則があります。

  • $(#mytxt)$("#mytxt")
  • val()あなたはselect()
  • $(document).ready(callback)構文は一種の非推奨される使用してイベントハンドラを適用することはできませんので、jQueryのではないスカラーを返す代わりにjQuery(callback)を使用するか、または単にする必要があります$(callback)
  • イベントをチェックして、どのキーが押されたかを確認し、キーを押すたびにDOM要素のサイズを変更しないことをお勧めします。引数、つまりeventをコールバック関数に渡すことができます。コールバック関数はイベントに関するデータを受け取ります。 event.whichは文字コードになります。 val()は何にを持たない、スカラー(一般的なJavaScriptの文字列)を返すこと

    <script language="javascript" type="text/javascript"> 
        $(function() { 
         $("#mytxt").keypress(function (event) { 
          if(event.which==13) 
           $(this).attr("rows", $(this).val().split("\n").length); 
         }); 
        }); 
    </script> 
    

    注:詳細情報については、結果としてthis page

を訪問するには、オプションとして、このような何かを持っているでしょうここからjQueryを使ってください。 split()は、文字列操作のJavaScript関数です。lengthは、配列の長さを測定するJavaScript属性です。

+0

多くの意味があります。私のエラーを修正してくれてありがとう(アレックスもやった)。 – Jaxidian

1

これを試してみてください:

$(function() { 

    $('#mytxt').keypress(function (e) { 

     var code = (e.keyCode ? e.keyCode : e.which); 
     if(code == 13) { //Only do this when enter is pressed 

      $(this).attr('rows', function() { 
       var val = $(this).val(); 
       return val.split('\n').length; 
      }); 

     } 

    }); 
}); 
+0

クローサーを使用するlamdasスペースにあると思います。その内部関数の戻り値が私が欠けていたものの一部です。今私は文字列を取って、各文字を繰り返し、その文字を、Linq '.Select'メソッドに渡されるラムダ式に相当するブール値を返す関数にパラメータとして渡しますか? – Jaxidian

+1

@ Jaxidianでは、jQueryは主にDOM操作用に作られました。それは値とは関係なく、DOMを中心にしています。文字列操作などのために、他のライブラリはありますが、jQueryはありません。 – AlexanderMP

関連する問題