2017-06-26 3 views
1

私を助けてください..のcontentEditableなし検出画像

私はこのコードを使用し、特に画像検出

に、のcontentEditable問題があります。

function getnode() { 
    var node, selection; 
    if (window.getSelection) { 
     selection = getSelection(); 
     node = selection.anchorNode; 
    } 
    if (!node && document.selection) { 
     selection = document.selection; 
     var range = selection.getRangeAt ? 
      selection.getRangeAt(0) : 
      selection.createRange(); 
     node = range.commonAncestorContainer ? 
      range.commonAncestorContainer : 
      range.parentElement ? range 
      .parentElement() : range.item(0);} 
    if (node) { 
     return (node.nodeName == "#text" ? node.parentNode :node); 
    } 
} 

はjqueryの:

$(function() { 
    $("#editor").bind('click', function (e) { 
      var $node = $(getnode()); 

      if ($node.is('a')) { 
        alert("Yes I am link"); 
      } 

      if ($node.is('b')) { 
       alert("Yes I am bold"); 
      } 

      if ($node.is('img')) {alert("IMAGE READY"); 
      } else { 
       $("#editor").focus(); 
      } 
     }); 
    }); 

FIDDLE DEMO:Ple ASE

は、私はあなたの問題を解決する最も簡単な方法は、ない独自のgetnode機能を使用しますが、要素がクリックから来ることを可能にすることだと思う事前

+0

にあなたが 'e.target'を使用していない理由はどのような理由を試してみましたか? – Icepickle

+2

** **あなたの問題は何ですか?私はちょうどあなたのフィドルを試して、それは正常に動作するようです。 – gus27

+0

@ gus27イメージを追加してイメージをクリックした後に通知がないので、正しいノードを返さないgetnode()関数でエラーが発生している可能性があります。 – Icepickle

答えて

1

にありがとうござい方法を見つけるために、私を助けてターゲットプロパティを使用してイベントハンドラを呼び出します。このようにコードを変更する

は完璧に動作し、少なくとも、シナリオのために私は

$("#editor").bind('click', function (e) { 
    var $node = $(e.target); 
    if ($node.is('a')) { 
     alert("Yes I am link"); 
    } 
    if ($node.is('b')) { 
     alert("Yes I am bold"); 
    } 
    if ($node.is('img')) {alert("IMAGE READY"); 
    } else { 
     $("#editor").focus(); 
    } 
}); 
+0

このデモ[FIDDLE](https://jsfiddle.net/pjus4ace/2/)に感謝します。 –

関連する問題