クリックされた要素の祖先の 1 つにクラス「textbox」があり、どの祖先にもクラス「mceExternalToolbar」がない場合、特定のアクションを実行する必要があります。オブジェクトに親「mceExternalToolbar」がある場合、親「textbox」があることはほぼ確実ですが、その逆は当てはまりません。
私はこれを使用しています:
$('#content').click(function(e){
var $eparent = $(e.target).closest('.textbox');
var $etoolbar = $(e.target).closest('.mceExternalToolbar');
// what's wrong with this if condition?
if($eparent.length==1 && !$etoolbar.length)
{
//do something
}
});
私はそれが十分に単純だと思っていましたが、うまくいかないようです。$etoolbar == NULL
有効なjqueryではありませんが、条件で使用すると、条件は少なくとも初めて実行されます(ただし、コンソールでエラーが発生します)。
私のロジックや jQuery の使用方法に何か問題がありますか?
編集
以下に HTML コードを示します。簡単に説明します。
テキスト ボックスを動的に作成するコンテンツ ボックスがあります (それぞれに tinyMCE リッチ テキスト エディターを使用しています)。テキストボックスが「アクティブ化」される場合があります (つまり、tinyMCE は、クラス「mceExternalToolbar」の div を含む、テキストボックス要素内に一連の要素を作成します)。ユーザーは大きなコンテンツ div のどこでもクリックできますが、クリックした場合のみです。テキストボックスは、特定のアクションを実行したいですか。さらに、クリックがテキストボックスの mceExternalToolbar 領域にない場合にのみ、クリックを楽しませます。
<div id="content" style="top:195px; position:absolute; height:300px; width:600px;border: 1px solid black;">
<!-- THE BOX BELOW WAS CREATED DYNAMICALLY -->
<div id="textbox_1" class="textbox" style="top: 101px; left: 112px; cursor: move;" aria-disabled="true">
<div id="textbox_1_menu" class="menu"> <!-- menu items --> </div>
<div id="textareacontainer_1" class="textareaedit">
<textarea id="textarea_1" class="tinymce" style="display: none;" aria-hidden="true">
<p>Testing this textbox</p>
</textarea>
<span id="textarea_1_parent" class="mceEditor defaultSkin" role="application" aria-labelledby="textarea_1_voice"></span>
<div style="position:relative">
<!-- THIS HERE IS THAT PARENT WHO, IF ANY OF ITS CHILDREN ARE CLICKED, I WILL NOT ENTERTAIN IT -->
<div id="textarea_1_external" class="mceExternalToolbar" style="display: block; top: -28px;">
<a id="textarea_1_external_close" class="mceExternalClose" href="javascript:;"></a>
<table id="textarea_1_tblext" cellspacing="0" cellpadding="0">
<tbody>
<tr role="presentation">
<td class="mceToolbar mceLeft" role="presentation">
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- END CONTENT BOX -->
</div>
</div>