2016-03-29 4 views
3

実行時にプラグインによって(一部)設定されているDOMがあるため、完全に制御できません。 HTMLで作成する最初のオブジェクトは、というオブジェクトで、bootstrap-selectというプラグインが兄弟として<button>を作成しています。この<button>には、子要素<span>(プラグインによっても作成されています)があります。テキストを変更したいのですが、この<span>要素です。Javascript - ボタンの下にあるspanのinnerHTMLを設定する

ボタン自体の背景色も変更していますが、これは機能します。スパンのテキストを更新するために関数に1行または2行を追加するだけでいいです。ここで

は(灰色の部分は、私が設定しなければならないものである)DOMの関連する部分のスクリーンショットです:

enter image description here

そしてここでは私のコードです。これはもともとボタンの背景色を設定するために書かれたもので、その程度までは正しく動作します。私はちょうど同様、テキストを設定し、それを展開する必要があります。

function setColorForSelect(elem, col) { 
    // this will change the background color of the <select> object just changed to match the selection 
    // this is necessary because bootstrap-select imposes a complex DOM structure on the <select> item 
    // (there is a <button> that is what is being displayed, so that is the object whose background color needs 
    // to be changed, not the <select> object itself) 

    $(elem).siblings().each(function() { 
     var _this = $(this); 
     if(_this.is(":button")){ 
      _this.css('background-color', col); 
      $(this).children(":first").innerHTML = col; //<-- THIS IS THE LINE THAT DOESN'T WORK! 
      return false; 
     } 
    }); 
} 

これは、すべてのエラーを投げていないが、それは私が見ることができる何も変更されていません。この<span>への参照を取得して、テキストを変更するにはどうすればよいですか?ありがとうございました!

答えて

1

この構文を使用します。

ボタンの最初のスパンを見つけて、そのテキストを変更します。

$(this).find("span:eq(0)").text(col);

それとも

特定のクラスによってスパンを検索し、そのテキストを変更します。

$(this).find("span.filter-option").text(col);

はあまりにも他の方法がいくつかあります。私はそれらが既に他の答えで指摘されていると思います。

+1

私はあなたの第2の考えが働いたと思います。テキストが1秒間変化するのを見ることができます。そして、それは0番目の

+0

@Randallしかし、私はこのルートに行くのではなく、プラグインのドキュメントを見て、スパンに値を設定する方法を見つける必要があると思います。私はプラグインがその機能を持っていると確信しています。何をしようとしているのは回避策です。最後のオプションとしてこれを残してください –

+0

私は同意します。私は検索してきましたが、ドキュメントには何も見つかりませんでした。私が見つけることができる最も良いことは、本質的に私がやっているようにDOMツリーを横断することを示唆するこの記事です。 http://stackoverflow.com/questions/13437446/how-to-display-selected-item-in-bootstrap-button-dropdown-title – Alex

1

エラーが発生しない理由は、colの値をjQueryオブジェクトのinnerHTMLプロパティに割り当てただけだからです。

のいずれかが、そのオブジェクト

.children(":first").html(col); 

ためのjQueryが提供html機能を使用するかtext機能jQueryの

.children(":first").text(col); 

を提供して使用するか、またはネイティブ要素

.children(":first")[0].innerHTML = col; 
にアクセスすることにより、ネイティブのJavaScript APIを使用します

またはgetter jQuery provネイティブ要素を取得してネイティブAPIを使用する場合は、

.children(":first").get(0).innerHTML = col 
+0

意味があります。ありがとう! – Alex

0

もう1つ...

また、行うことができます:

$('span:first',this).text(col); //

はそれが役に立てば幸い!

関連する問題