0

おおよそ次のような HTML コードがあります。

<li id="someid-11">

<img src="..." alt="alt" />
<h2><a href="somelink"> sometext </a>
    <span><a class="editcontent" href="?action=editme">Edit</a></span>
</h2>
<div id="11" class="content">
 <!-- // content goes here -->
 <div class="bottom_of_entry"> </div>

</li>

a.editcontent を使用して、div.content でインプレース編集メソッドを有効にしています。私の現在のセレクターは次のようになります

jQuery('a.editcontent').bind('click', (function(){
    jQuery(this).parent('span').parent('h2').next('.content').trigger('edit');
}

それは機能しますが、醜いです。それを行うためのより良い方法があるはずですよね?

4

7 に答える 7

4

いくつかのメタ属性を使用すると、より良い解決策になると思います。

<li id="someid-11">

<img src="..." alt="alt" />
<h2><a href="somelink"> sometext </a>
    <span><a rel="11" class="editcontent" href="?action=editme">Edit</a></span>
</h2>
<div id="11" class="content">
 <!-- // content goes here -->
 <div class="bottom_of_entry"> </div>

</li>

(リンクに rel="11" を追加)

そして JavaScript で:

$( 'a.editcontent' ).click(function()
{   
    $( '#' + $(this).attr( 'rel' )).trigger( 'edit' );
});
于 2008-12-17T10:08:24.653 に答える
2

Sprintstar ソリューションをお勧めします。しかし、それが気に入らない場合は、これを使用してください:

$("a.editcontent").click(function(){
    $(this).parents("h2").next(".content").trigger("edit");
});

「h2」が複数ある場合:

$("a.editcontent").click(function(){
    $(this).parents("h2:first").next(".content").trigger("edit");
});
于 2008-12-17T14:34:43.260 に答える
2

ID をリンクに保存してから、ハンドラーで ID ごとにコンテンツ div を見つけ、トリガーを実行するほうがよいのではないでしょうか? そうすれば、特定の階層に縛られることはありません。

于 2008-12-17T09:57:58.140 に答える
1

私の頭から:

$("a.editcontent").click(function(){
    $(this).parents("h2").slice(0, 1).next(".content").trigger("edit");
});
于 2008-12-17T13:33:21.637 に答える
1

おそらく xpath を使用して、A から DIV に一度にアクセスできますか?

編集: どうやら xpath セレクターは jquery にはもうありません (これを指摘してくれたコメントの人に感謝します)

于 2008-12-17T09:51:38.307 に答える
1

スプリントスタートに同意

var clickHandler = function (link) {
     $(link.data.action).trigger("edit");
}

$('a.editconent').bind('click', {action:'.content'}, clickHander);

そうすれば、編集イベントを発生させる jQuery ステートメントについて、よりターゲットを絞ることができます。

于 2008-12-17T14:18:46.927 に答える
0

ある要素から別の要素に戻る必要があるため、読みにくいと思います。共通のコンテナーから両方を参照すると、それらのパスはより意味のあるものに見えます。

var listitem11 = $("#someid-11");

listitem11.find('a.editcontent').bind('click'), (function(){
     listitem11.find('.content').trigger('edit');
}

ここで、処理するリスト項目が複数あると思われます。その場合、以前は必要なかったループを囲む必要があります。それでも私はそれがあなたを先に進めると思います。

于 2010-07-07T06:30:44.807 に答える