使用jQuery查找元素的最快方法

时间:2009-10-29 06:43:11

标签: javascript jquery jquery-selectors

给出以下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都是唯一的。

3 个答案:

答案 0 :(得分:1)

如果click事件在特定行上且元素是该行的子元素,则可以使用context来获取结果。

$(".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>

答案 1 :(得分:1)

id无法在HTML中重复,

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

jQuery( your_query_string, parent )

父母是你可以使用的东西:

parent = query.parent()

例如:

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

name = jQuery(".name", parent)会在name元素下获得所有带有parent类的元素。

答案 2 :(得分: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');
}