2011-06-19 23 views
0

jQuery(およびjavascript)は本当に新しいです。 私は2つの重複した "エディタ"を持っており、関数呼び出し元と同じdivに含まれる段落に対して関数を実行したい。jQuery - 関数呼び出し元と同じdivで関数を実行

私は段落を見つけるのにclosestメソッドを使用していますが、それが最良の解決策であるかどうかはわかりません。要素のインデックスで何かをする方が良いでしょうか?

また、私は横断されたDOMの量を減らすためにセレクタにコンテキストを与えたいと思います。

マークアップの簡易版:

<div id="wrapper1"> 
    <div> 
    <p class="paragraph">This is text of box #1</p> 
    </div> 
    <div> 
    <div> 
     <a href="#" class="doBold">Bold</a> 
     <a href="#" class="doItalic">Italic</a> 
    </div> 
    </div> 
</div> 

<div id="wrapper2"> 
    <div> 
    <p class="paragraph">This is text of box #2</p> 
    </div> 
    <div> 
    <div> 
     <a href="#" class="doBold">Bold</a> 
     <a href="#" class="doItalic">Italic</a> 
    </div> 
    </div> 
</div> 

のjQueryの単純化されたバージョン:

$(document).ready(function($){ 

    var methods = { 
    doBold: function() { $(this).closest(':has(.paragraph)').toggleClass('bold') }, 
    doItalic: function() { $(this).closest(':has(.paragraph)').toggleClass('italic') }, 
    } 

    $('.doBold').click(methods.doBold); 
    $('.doItalic').click(methods.doItalic); 
    }); 

答えて

1

はこれを試します段落のみのクラス:

$(document).ready(function($) { 
    var methods = { 
     doBold: function(obj) { 
      $(obj).closest(":has('.paragraph')").find('.paragraph').toggleClass('bold'); 
     }, 
     doItalic: function(obj) { 
      $(obj).closest(":has('.paragraph')").find('.paragraph').toggleClass('italic'); 
     }, 
    } 
    $('.doBold').click(function() { 
     methods.doBold(this) 
    }); 
    $('.doItalic').click(function() { 
     methods.doItalic(this) 
    }); 
}); 
+0

@ user495915第2の解決策は、パラグラフとリンクの両方に 'bold'と' italic'クラスを適用します。 'paragraph'だけに適用したいのであれば、フィルタリングする必要があります。 3番目のソリューションはフィルタ – thecodeparadox

+0

@ Abdullah.abcoderに感謝します、それはトリックを行います。今私は(おそらく愚かな)質問がある、 'doBold'メソッドと' doItalic'メソッドの外に '.paragraph'を見つける部分を格納することができますか? – user495915

+0

@ user495915あなたは、その.paragraphのHTML全体、あるいはテキストのみを保存したいですか? plsは明らかにする。私はあなたを助けるかもしれない – thecodeparadox

0

あなたが探している単語である "この"

$('doBold').click(function(){ 
    $(this).parents('.paragraph').toggleClass('bold'); 
} 
+0

これは '.doBold'が' .paragraph'の子ではないので動作しません。私の間違いは、HTMLマークアップがうまく形成されていなかったことです(私はそれをより明確に編集しました)。 – user495915

+0

ああ - 申し訳ありません。とにかくアブドラは今あなたのためにそれを正しく持っています。 – BonyT

0

この 私が変更したかもしれない唯一のことは、IDを編集に与えることですそれが適用解決(あなたがしようとしたこと)

$(document).ready(function($) { 
    var methods = { 
     doBold: function(obj) { 
      $(obj).closest(":has('.paragraph')").toggleClass('bold'); 
     }, 
     doItalic: function(obj) { 
      $(obj).closest(":has('.paragraph')").toggleClass('italic'); 
     }, 
    } 
    $('.doBold').click(function() { 
     methods.doBold(this) 
    }); 
    $('.doItalic').click(function() { 
     methods.doItalic(this) 
    }); 
}); 

1以上:

$(document).ready(function($) { 
    var methods = { 
     doBold: function(obj) { 
      $(obj).parents("div[id*='wrapper']").find('.paragraph').toggleClass('bold'); 
     }, 
     doItalic: function(obj) { 
      $(obj).parents("div[id*='wrapper']").find('.paragraph').toggleClass('italic'); 
     }, 
    } 
    $('.doBold').click(function() { 
     methods.doBold(this) 
    }); 
    $('.doItalic').click(function() { 
     methods.doItalic(this) 
    }); 
}); 

別ソリューション:ORS(Editor1、Editor2)段落、およびそれらを参照DIRECTRY $("#Editor1")... または$(this).closest('p')...

関連する問題