2017-05-01 14 views
0

InboxSDKにユーティリティベースを構築しています。メールの最後に(署名の前に)テキストを挿入します。 InboxSDKは、メッセージ本体をHTML要素として提供し、テキストを配置するためにJqueryを使用しようとしています。複雑になるところには、ユーザーが潜在的に持つ可能性のあるさまざまな種類の署名があります。 ' - ' シグネチャー Jquery - Gmailの署名の前にテキストを挿入

  • NO ' - ' シグネチャー
  • 2と3が困難なもので、私は3

    1. に署名なし
    2. それらをグループ化していないました。どちらの場合も、これはHTMLです。 ' - '

      2.

      <div id=":nv" class="Am Al editable LW-avf" hidefocus="true" aria-label="Message Body" g_editable="true" role="textbox" contenteditable="true" tabindex="1" style="direction: ltr; min-height: 309px;"> 
          <br clear="all"> 
          <div> 
           <!-- 
            <div> 
             Injected Text 
            </div> 
           --> 
           <br> 
          </div>-- 
          <br> 
          <div class="gmail_signature" data-smartmail="gmail_signature"> 
           <!-- Signature Content --> 
          </div> 
      </div> 
      

      3.

      <div id=":nv" class="Am Al editable LW-avf" hidefocus="true" aria-label="Message Body" g_editable="true" role="textbox" contenteditable="true" tabindex="1" style="direction: ltr; min-height: 309px;"> 
      <br clear="all"> 
      <div> 
          <!-- 
           <div> 
            Injected Text 
           </div> 
          --> 
          <div class="gmail_signature" data-smartmail="gmail_signature"> 
           <!-- Signature Content --> 
          </div> 
      </div> 
      
      存在する、私は私は新しいテキスト<div>ためたいです最初の子div内に配置されるように注入する。それが存在しないときは、署名の前に1つのdivという、メッセージ本文の直接の子としてそれを必要とします。

      何が最もエレガントなのですか?jquer-ishこれを行う方法はありますか?

      Gmail Signature Options

    答えて

    0

    あなたが最初の子として追加するために、jQueryのprepend()を使用しようとしました、と要素の前に追加するためにbefore()/insertBefore()?ここで

    ドキュメントへのリンク:

    http://api.jquery.com/prepend/

    http://api.jquery.com/before/

    +0

    私はこれらの機能を認識していますが、私はどのケースが提示されているかを特定してから、適切なJQ機能を適用する方が良いと思います。 –

    +0

    あなたのメインコンテナに、コンテンツでいっぱいになるIDを挿入します。 次に、この方法で要素を探します: 'if($(" #myDiv divExpected ").length> 0)//要素が存在するために先頭の要素を使用します else //要素が存在しないために前に使用する ' – quirimmo

    +0

    両方のケース(2と3)では、署名が存在します。あなたの提案は、残念なことにあいまいではありません。 –

    0
    var foo = $(document.getElementById(":nv")).children("br:first").next(); 
    var divToAdd = $("<div></div>").text("Injected Div"); 
    
    foo.prepend(divToAdd); 
    

    これは動作するはずです。たとえば、$(document.getElementById( ":nv"))$( "\\:nv")より高速ですが、どちらの方法でも要素にアクセスできます。

    +0

    残念ながら私は最後のdiとしてテキストを注入しようとしていますv署名の前に。これは、電子メールの上部に新しい部門を配置するようだ。 –

    0

    私はそれを得たと思います。

    var insertDiv = $(`<div>${text}</div>`); 
    var emailBody = window.gmailComposer.getBodyElement(); 
    
    if($('[data-smartmail="gmail_signature"]').length > 0) { //if there is indeed a signature block. 
        if ($(emailBody).children().has('[data-smartmail="gmail_signature"]').length == 0) { //if we have 'double dash' mode enabled. 
        insertDiv.insertAfter($('[aria-label="Message Body"] > div:not(\'[data-smartmail="gmail_signature"]\'):last'), emailBody); //insert the text in the last div before the "--" div 
        } else { //'double dash' mode disabled 
        insertDiv.insertBefore($('[data-smartmail="gmail_signature"]'), emailBody); //insert the text before the signature 
        } 
    } else { //no signature 
        $(emailBody).append(insertDiv); //insert the text at the end of the email 
    } 
    
    関連する問題