2017-06-18 10 views
1

Infowindowでいくつかのスタイルを修正するには、クラス 'gm-style-iw'で要素を選択する必要があります。選択はangularjs指示の内部で行われます。google maps select infowindow angularjs指示文のDOM要素

<div ui-view="full-map" id="full-map" class="mainMap col-xs-6"></div> 

ui-view - IWコンテンツのディレクティブを読み込みます。 mapはそのディレクティブ内で初期化されます。

ディレクティブのコントローラの初期化では、クラス 'gm-style-iw'で要素を編集する必要があります。

var iwElem = $document[0].getElementsByClassName("gm-style-iw") 

は正しい要素を返します。

にconsole.log(iwElem)結果は次のとおりです。

[] 
length: 1 
0: div.gm-style-iw 
__proto__: HTMLCollection 

私はそれの後にこだわっているが。 HTMLCollectionとして、これはHTML要素の配列ですが、私は理解しています。 =>私はiwElem[0]でこれを得ることができる必要があります、iwElem[0]undefinedを返します。

はまた、jQueryのセレクタで試してみました:

$('.gm-style-iw') =>length:0

$('div.gm-style-iw') =>length:0

+0

'iwElem [0]' yes&noでこの0要素を取得できる必要があります。他の番号を試したり、コンソールでそのコレクションを出力したり、その中で見つかるものを確認したりできます。 gmaps info-window設定オブジェクトにルールを注入する方が簡単ではないでしょうか? – admcfajn

+0

あなたのページは何フレームありますか?これはフレームの問題のように見えます。あなたは一度devツールから別のフレームでget elemetゲッターを試すことができます。また、フレームは同じかクロス起点ですか? – gauravmuk

+0

投稿に '$ document [0] .getElementsByClassName(" gm-style-iw ")'の出力が含まれていました。 gmaps info-window configにルールを注入する方が簡単ではないでしょうか?特に、いくつかのデフォルトクラスを削除することでやりたいことが必要なエディションです。 – user1935987

答えて

0

を、あなたのHTMLが

<div ui-view="full-map" id="full-map" class="mainMap col-xs-6"> 
    ...some codes 
    <div class="gm-style-iw"></div> 
    ... other codes 
</div> 

そして、あなたの場合のようなものであることが確実な場合JQueryを使用していますが、次のセレクタを試してみてはいかがですか?問題が部分的に解決されたクラス.mainMap

+0

それはちょうどそのようなものではありませんが、はい - 私は似たようなことを試しましたが、それは助けになりません。 しかし、なぜ私は '$ document [0] .getElementsByClassName(" gm-style-iw ")[0]'を得ることができませんか? – user1935987

+0

申し訳ありませんが、私はangularjsに気付かなかった、私はそれを試してみるだろう。 –

+0

ディレクティブ:コントローラを使用している場合は、document.getElementsByClassNameではなくelement.getElementsByClassNameを使用しますか? '[$ scope '、' $ element '、function MyTabsController($ scope、$ element){}]' 'カスタムディレクティブの作成'(https://docs.angularjs。 org/guide/directive) –

0

の親ノードの下でクラス.gm-style-iwの子ノードを取得意味

$('.mainMap .gm-style-iw') 

$timeout(function() { 
     removeIwStandardStyles() 
    },300); 

    function removeIwStandardStyles() { 
      var iwOuter = $(iwOuterTemp); 
      while (iwOuterTemp.length < 1){ 
      iwOuterTemp = document.getElementsByClassName("gm-style-iw"); 
      } 

      var iwBackground = iwOuter.prev(); 

      iwBackground.children(':nth-child(2)').css({'display' : 'none'}); 
      iwBackground.children(':nth-child(4)').css({'display' : 'none'}); 
    } 

$document[0].getElementsByClassName("gm-style-iw") corrent要素をキャッチしましたが、彼らはまだDOMに適用されていなかったように思える、またはいくつかの他の負荷の問題。

しかし、解決策は完全ではありません(whileを参照) - 私はその要素が間違いなく読み込まれる原因になると思います。 $timeout自体が完全に助けになることはありません。完全なIWロードまで待機することもあります。

関連する問題