2

我刚刚开始使用 jQuery,对此我感到非常兴奋。

我发帖的原因是我写了一些 jQuery 来完成它的必要任务,但我怀疑它缺乏一点优雅......

我正在尝试获取所有具有以下内容的表行:1)“项目”类 2)具有值的子文本输入框

的HTML:

<tr class="item">
    <td class="sku">[dynamic]</td>
    <td class="quantity">
        <input type="text" name="[dynamic]" maxlength="3" /></td>
</tr>

jQuery

...
var selections=$(".item>.quantity>:text[value!='']").parent().parent();
...

我在上面发布的代码有效,但有两件事(至少?)闻起来有点滑稽。

代码气味 #1:我在末尾使用 '.parent().parent()' 来抓取整行。有没有什么方法可以让我说,“给我所有的 tr 和一个‘item’类,其中子文本输入有一个值”,而不是在最后回溯层次结构?

代码异味 #2:我想不出在选择过程中“修剪”文本输入值的方法,以确保不会将空格解释为内容。使用我目前的方法,我将不得不在 .each 循环期间“修剪”并再次检查,这似乎是多余的。

如果您看到“更好的方法”,请告诉我?

谢谢,理查德

4

2 回答 2

5

#1

改用这个(注意has选择器):

var selections=$(".item:has(>.quantity>:text[value!=''])");

#2

空格通常被认为是有效输入,因此如果您的应用程序特别需要其他内容,可以使用$.trim().

于 2009-04-20T20:57:06.373 回答
2

我不确定您是否有意这样做,但您不必遍历每个孩子直到输入。除非你有这样做的理由,否则这同样好:

var rows = $('tr.item:has(input:text[value!=''])');

另请注意,jQuery 文档建议您在前言中将其排除在外,这等于是:text一个非常慢的选择器。input*:text

于 2009-04-20T21:11:37.947 回答