我有一个在两个不同页面上运行的脚本。它所做的就是找到带有文本UID的div旁边的特定div的文本。请注意,我无法编辑相关网页的实际内容,否则我只会将这些类或ID直接定位到目标网页。
$(document).ready(function() {
var uid = $('div.label').filter(function() {
return $(this).text() == 'UID';
}).next().text();
$('.column.right.top-ribbon-nav, .client_custom_fields_container').append(function() {
return '<a target="_blank" class="top-nav-item pLink" style="color: red" href="https://www.xxxxxxx.com/private/index.html?content=admin2&page=userdetails&id=' + uid + '">User Page</a>';
}
});
$('.pLink').on('click', function() {
if(uid == '~') {
alert('No UID is present for this contact. Please add it and try again.');
return false;
}
});
});
这可以按预期工作,但在我使用它的两个页面之一上,实际上有两个匹配该变量。因此,在该页面上,它将获取两个结果并将它们相加,以便变量uid与UID1和UID2匹配并变为UID1UID2。
在这个例子中,我实际上只想要第二场比赛。
我的想法是添加一个条件,首先确定该变量是否有多个结果。我相信我错误地认为我可以做if uid.length > 1
,因为uid实际上是返回容器匹配的文本,而不是容器本身。然后我尝试使用index
或eq
获取1
,这将是我的第二个结果。
我对javascript和jquery都很陌生,并且认为我可能误解了一些基本的错误。
编辑:我发现我只是在错误的位置使用.eq()
。这是我的工作代码:
$(document).ready(function() {
var uid = $('div.label').filter(function() {
return $(this).text() == 'UID';
}).next().text();
$('.column.right.top-ribbon-nav, .client_custom_fields_container').append(function() {
if (uid.length > 1) {
var uid2 = $('div.label').filter(function() {
return $(this).text() == 'UID';
}).eq(1).next().text();
return '<a target="_blank" class="top-nav-item pLink" style="color: red" href="https://www.xxxxxxxx.com/private/index.html?content=admin2&page=userdetails&id=' + uid2 + '">User Page</a>';
} else {
return '<a target="_blank" class="top-nav-item pLink" style="color: red" href="https://www.xxxxxxxx.com/private/index.html?content=admin2&page=userdetails&id=' + uid + '">User Page</a>';
}
});
$('.pLink').on('click', function() {
if(uid == '~') {
alert('No UID is present for this contact. Please add it and try again.');
return false;
}
});
});
答案 0 :(得分:2)
您可以获得过滤功能的结果
var uid = $('div.label').filter(function() {
return $(this).text() == 'UID';
});
然后获取此结果的最后一项
var unique = uid[uid.length-1];
然后你就可以在这个对象上做你想做的事了
unique.text()...
答案 1 :(得分:0)
我觉得这是最好的选择,而且更容易阅读。
您可以在初始过滤器后使用.last()
或.first()
来获取始终最后一个或第一个过滤器。
如果它始终是第二场比赛而不是第三场比赛,你也可以使用.eq(1)
。
var uid = $('div.label').filter(function() {
return $(this).text() == 'UID';
}).last().next().text();