Jquery:选择元素 A(如果存在)的惯用方法,否则选择元素 B?
我正在使用 JQuery 编写 GreaseMonkey 脚本。
有时我想要修改的站点在 TD 中显示信息,因此:
<center><table><tr><td>
Something interesting here.</td></tr>....</table></center>
而有时它在同一表结构中的 P 标记(或多个)中显示内容,因此:
<center><table><tr><td>
<p>Other text about the same interesting thing.
<p>and maybe some more stuff too.</td></tr>...</table></center>
现在我正在使用两个不同的选择器来选择
与
,但我想知道是否有一种好方法可以在单个标签中仅选择 P 标签(如果存在),否则选择 TD Jquery 选择器,因为我想要附加的内容在两种情况下都是相同的。
(如果我只是附加到 TD,无论如何,我的添加位置会根据 P 标签的存在/不存在而变化,所以我要保持位置一致性。)
I'm writing a GreaseMonkey script with JQuery.
Sometimes the site I want to modify displays information in a TD, thus:
<center><table><tr><td>
Something interesting here.</td></tr>....</table></center>
whereas sometimes it displays things in a P tag (or several) within the same table structure, thus:
<center><table><tr><td>
<p>Other text about the same interesting thing.
<p>and maybe some more stuff too.</td></tr>...</table></center>
Right now I'm doing two different selectors to select the <p>
vs. the <td>
, but I'm wondering if there's a nice way to select only the P tag if it's present and the TD otherwise in a single Jquery selector, since what I want to append is identical in both cases.
(If I just append to the TD regardless, the location of my addition changes based on the presence/absence of the P tag, so I'm going for placement consistency.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的,您可以通过扩展 jQuery 来做到这一点。
将其放在 GM 文件顶部附近:
然后你可以通过以下方式获取所需的元素:
此版本的
substituteIfPresent()
仅返回第一个p
标记(如果存在)。Yes, You can do this by extending jQuery.
Put this near the top of your GM file:
Then you can get the desired element with:
This version of
substituteIfPresent()
returns only the firstp
tag, if present.在单个 jQuery 语句中不可能,但你可以这样做:
Not possible in single jQuery statement, but you can do something like this:
我会使用
.map
(或.each
) 为此:演示:http://jsfiddle.net/tBWhH/3/
I would use
.map
(or.each
) for this:Demo: http://jsfiddle.net/tBWhH/3/
仅使用一个选择器操作的一种好方法是:
这将
$el
设置为最后一个p
元素(如果存在),否则设置为td
元素。请注意,如果页面上有多个td
元素,这会产生意外结果,因此您应该使用比$('td')
更精确的选择器。自执行函数的原因是为了避免额外的变量污染你的作用域。
A nice way with only one selector operation is this:
This sets
$el
to the lastp
element if any exist and otherwise to thetd
element. Note that this will have unexpected results if you have more than onetd
element on your page, so you should use a more precise selector than$('td')
.The reason for the self-executing function is to avoid polluting your scope with extra variables.