JavaScript/jQueryの奇妙な振る舞いのように思えますが、クラス名で親要素を見つけるために書いた簡単な関数ではうんざりです。この関数は、要素のクラスをチェックするという点ではかなり単純ですが、見つからない場合は、クラスを見つけるまで親要素と同じ関数を呼び出します。jQueryクラスの再帰的検索親要素
ここに関連するJSFiddle、https://jsfiddle.net/xxvywa4v/があります。
<div class="outer">
<div class="inner">
<div class="innermost">Click Me</div>
</div>
</div>
と次のJavaScript:
function getParentByClass($el, className) {
if ($el.hasClass(className)) {
console.log('found element!', $el); // returns correct element
return $el;
} else {
getParentByClass($el.parent(), className);
}
}
$('.innermost').on('click', function(e) {
var $outerEl = getParentByClass($(e.target), 'outer');
console.info($outerEl); // undefined
});
はなぜ正しく記録され、getElementByClass
で見つかった要素ですが、クリックハンドラに返され、次のHTMLを考える
としてundefined
?
(注:私はこの機能を再現する別の方法に興味がないんだけど、むしろそれは、この特定の実装では機能しない理由)
はjQueryのは、すでにこの '.parentsを持っていません() '? – Quantastical
@ Quantastical彼は、彼の実装がうまくいかない理由を知りたがっています。 – juvian