/ / jQueryでの.childrenと.findの使用-javascript、jquery、children

.childrenと.findをjQueryで使用する - javascript、jquery、children

私のページに一連のコントロールがあります反復して、値があるかどうかを判断しようとします。これらのコントロールの一部は<select>アイテムであり、この場合、<select>コントロールに関連付けられているオプションをループして、選択されているものを見つける必要があります。私は.children()と.find( "option:selected")を試してみましたが、どちらも機能しません(どちらもJavaScriptで「未定義」エラーをスローします)。何が悪いのですか?

function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
control.children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != "") {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != "") {
json += control.dataset["fieldname"] + ": ";
json += control.val() + ",";
}
}
}
};

エラーは上記のコード(control.children.each)の5行目に表示されています。私はもう試した:

control.children.each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {

これらのオプションはどれも機能しません。参考までに、「制御」変数は、次のようにして見つけた別の関数から渡されます。

$("#search-header").find("select").each( function() {
json = getJsonValue(this, json);
});

回答:

回答№1は1

私のコメントをさらに拡張すると、オブジェクトを渡していることがわかります this、これは変数に割り当てられます control あなたの関数で。ただし、jQueryは、jQueryオブジェクトに変換されない限り、このオブジェクトを直接操作することはできません。これは、jQueryエイリアスでラップするだけで実行できます。 $(control) (ヒント、人々が使う方法と同じように $(this) jQueryでも同じです)。

したがって、この方法でコードを修正すると、機能するはずです。

function getJsonValue(control, json) {
if(control.dataset["fieldname"] !== "undefined"){
if(control.tagName == "SELECT") {
var selected = "{";
var idName = control.dataset["idname"];
$(control).children.each( function() {
if(this.selected) {
selected += idName + ": " + this.val() + ",";
}
});
selected += "}";
if(selected != "") {
json += control.dataset["fieldname"] + ": ";
json += selected + ",";
}
} else {
if(control.val() != "") {
json += control.dataset["fieldname"] + ": ";
json += $(control).val() + ",";
}
}
}
};

p / s:余談ですが、jQueryオブジェクトから元のDOMノードにアクセスしたい場合は、 $(control)[0] ;)


回答№2の場合は1

試す

$(control).find("option:selected").each( function() {

または

$(control).children.each( function() {

呼び出し元から関数に(this)を渡します。 jqueryセレクターはありません。


回答№3の場合は0

最初の子にオープンクローズブラケットがありません

control.children().each( function() {
control.childre().each( function() {
control.find("option:selected").each( function() {