0

给定以下html:

<tr>
        <td>Content</td>
        <td>Content</td>
        <td>Content</td>
        <td><img id="imgProductPurchased" runat="server" visible="true" alt="Product Purchased" title="Product Purchased" src="/sitecore/shell/Themes/Standard/Applications/16x16/checkbox.png" /></td>
        <td>
            <asp:PlaceHolder ID="plhPurchased" runat="server">
                <span class="roundButton roundButtonLarge"><a id="hypPurchased" class="registryPurchased" href="#" title="Mark product as purchased" runat="server"><span>
                <em class="registryPurchased"></em>Purchased</span></a> <span class="buttonEndLarge">
                </span></span>
            </asp:PlaceHolder>
        </td>
    </tr>
            <tr>
                    Repeats above
            </tr>

我在“hypPurchased”上有一个点击事件。当该事件触发时,我需要访问该行的 plhPurchased 元素和“imgProductPurchased”元素。

编辑:

我应该说这是用 ASP.NET 构建的,因此,id 都是唯一的。

4

3 回答 3

1

如果单击事件在特定行上并且元素是该行的子元素,则可以使用上下文来获取结果。

$(".myRow").click(function() {
    var somethingFromMyRow = $(".myChildClassName", this).text();
    alert(somethingFromMyRow);
});

请注意,您不应该在页面上的任何位置复制相同的 ID,因此我提供的示例使用了类名 - 所以假设您的示例中有这样的 HTML。

<tr class="myRow">
    <td><span class="myChildClassName">Some Text In Row 1</span></td>
    <td>More Stuff</td>
</tr>
<tr class="myRow">
    <td><span class="myChildClassName">Some Text In Row 2</span></td>
    <td>More Stuff</td>
</tr>
<tr class="myRow">
    <td><span class="myChildClassName">Some Text In Row 3</span></td>
    <td>More Stuff</td>
</tr>
于 2009-10-29T08:34:20.847 回答
1

id's 不能在 HTML 中重复,

无论如何,您需要做的是获得一个父元素(在层次结构中向上直到获得包含“当前”行的父元素),然后对它运行查询:

jQuery( your_query_string, parent )

parent 是您可以使用的东西:

parent = query.parent()

例如:

function click_handler(element)
{
    parent = jQuery(element).parent()
    name = jQuery(".name", parent)
    // do stuff
}

name = jQuery(".name", parent)将获得该元素下所有具有类nameparent元素。

于 2009-10-29T08:43:20.440 回答
0

Hasen 说过,你不能在 html 中复制 id。

因此,将一个类应用于“plhPurchased”,然后:

在 hypPurchased 你把 onclick="yourFuntion(this)"

function yourFuntion(elem)
{
  var tr=$(elem).closest('tr');
  var _imgProductPurchased = tr.find('img');
  // if you have more then a img per row, you should apply a class to the image to and get it by:
  // tr.find('.imgClass');
  var _plhPurchased=tr.find('.thatClassYouApplyed');
}
于 2009-10-29T10:09:24.737 回答