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

将id存储在链接中,然后在你的hander上,通过id找到内容div,然后做你的触发器不是更好吗?这样你就不会被绑定到特定的层次结构。

于 2008-12-17T09:57:58.140 回答
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 回答
1

您可能可以使用 xpath 一口气从 A 到 DIV?

编辑:显然 xpath 选择器在 jquery 中不再存在(感谢评论中的人指出这一点)

于 2008-12-17T09:51:38.307 回答
1

意料之外:

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

我同意 Sprintstart

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 回答