0

JQueryとjavascript関数を使用しても同じ結果が得られません。getElementByIdとJQueryが同じ結果を返さない

これは、ここではHTML

<form id="testform"> 
    <div id="FormContainerID"></div> 
    <input type="button" id="y" value="Button" /> 
    <div id="ListContainerID"></div> 
</form> 

ある行1をアクティブにするとJavascriptを

01 var Form = document.getElementById('y').form; 
02 //var Form = $('#y').closest('form'); 
03 alert(Form); 

、私は法的なフォームオブジェクトを取得することです。 Alertには「object HTMLFormElement」と表示され、すべて正常に動作します。

しかし、代わりに行02を使用すると、実際のフォームオブジェクトではないため、アラートに「オブジェクトオブジェクト」と表示されてエラーが表示されます。

JQueryが正しいオブジェクトを返さないのはなぜですか? ChromeとIE8で同じ結果が得られます。

[EDIT]私はjQueryのバージョンを使用してい
:jqueryの-1.5.1.min

[SOLUTION]
これをクリアするためのありがとう。私はにコードを変更:

var Form = $('#'+fChildID).closest('form')[0];

...そして今、それが魅力のように動作します。
Vivek Goelが最初に答えたので、彼に信じる。 JQueryのインスタンスモデルについて説明した他の人に投票しました。

ありがとうございます。

答えて

1
jqueryの使用と

alert(Form[0]); 

http://jsfiddle.net/dvCtr/

+0

.closest()が配列を返す必要があるというドキュメントが見つかりません。常に配列を返しているのですか、何か基本的なことを誤解していますか? –

+1

@Max:配列ではなく、 'jQuery'インスタンス(' jQuery.fn.init'コンストラクタ関数で作成されたオブジェクト)です。これは、DOM要素の一致するセットを包むラッパーです。そして、はい、jQuery *は、一致する要素がゼロかどうかにかかわらず、常に1つまたは1,000(またはそれ以上)の 'jQuery'インスタンスを返します。 –

4

あなたは、いない生のDOM要素を、物事をルックアップするためにそれを使用するときにjQueryはjQueryインスタンスを返します。 jQueryインスタンスは、一致する要素のセットを囲むラッパーであり、要素にセットベースの操作を適用できます。これは、jQueryを使用するための絶対的な基本の1つです。

また.length - 1まで、など、配列のような表記  — [0][1]を使用してあなたのような場合は、生の要素にアクセスすることができます。したがって、あなたの場合、要素が1つしかないので、Form[0]になります。あなたのコードが複数のフォーム要素とマッチした場合は、2番目のフォームの場合はForm[1]、3番目の場合はForm[2]などとなります([]の表記を使用すると、ドキュメント内で驚くほど見つけにくいです。昔はgetメソッドを使用していましたが、負のインデックスに対して特別な処理を使用している場合は、これだけが必要です)。

生の要素にはまったくアクセスする必要はありません。いったんフォームを持っていれば、フォームで何をしようとしているのかは分かりませんが、提出する場合はのインスタンスに電話してフォームを送信してください。属性を取得したい場合は、attr jQuery関数があります(例:val = Form.attr("action")など)。

jQueryは非常にセットベースですが、最初は気分が悪いと感じるが実際にはかなりうまく動作します。 の値がの場合、関数は通常の最初の要素から値を取得します。 の値をに設定すると、関数は通常に設定します。一致する要素はです。

0

てみ

するvarフォーム= $( "#yを")これはDOMツリーにyの親を返す必要があります

。親は

+0

'parent'は関数であり、プロパティではありません。そして、あなたはコードを変更していますが、(親()としても) '*は、' closest() 'のように、生のDOM要素ではなくjQueryオブジェクトを返します。おそらく、彼は柔軟性を持ち、設計者がフォームと入力要素の間に追加のレイヤーを配置できるようにしたいと考えています。 –

2

これは、jQueryのステートメントのため、フォームオブジェクトではなくjqueryオブジェクトを返しています。 フォーム要素にアクセスするには、[0]のようなものが必要です。

+0

[documentation](http://api.jquery.com/closest/): > DOM要素のセットを表すjQueryオブジェクトを指定すると、.closest()メソッドでこれらの要素を検索できます。それらの祖先をDOMツリーに組み込み、**対応する要素から新しいjQueryオブジェクト**を構築します。 – Vlad

関連する問題