javascript - 如何比较来自不同元素的 2 个值并仅对具有匹配值的元素采取措施?
问题描述
我几乎完成了一个脚本,该脚本将搜索多个元素以查找一个人的姓名。如果脚本找到匹配项,它应该只为包含人名的元素获取该元素中的 ID 值。
之后,此脚本应搜索不同的元素组,并找到它们的输入值。如果输入值与先前元素的 ID 值匹配,我希望它更改与具有输入值的元素共享相同父元素的子元素的背景颜色。
预期结果:本质上:假设我有 3 个项目,但只有 2 个包含“Rufio”一词。仅对于包含“Rufio”的项目,这些项目的背景颜色应更改。
当前结果:脚本当前正在更改所有元素的颜色,而不是仅更改包含“Rufio”的元素的背景颜色。
我确定我在这里的所有括号中都迷失了,但是我哪里出错了?
var checkexist = setInterval(function() {
var tickets = document.querySelectorAll("[id^=ticket-tip-] > div > ul > li");
tickets.forEach(ticket => {
if (ticket.innerHTML.indexOf("Rufio") !== -1) {
var ticketid = ticket.parentNode.parentNode.parentNode.id;
var fancyID = ticketid.replace("ticket-tip-", "");
var mainareas = document.querySelectorAll(
"[id^=player-ticket-content] > div.ticket-holder > div > ul > li > input"
);
var tickethrefs = document.querySelectorAll(
"[id^=player-ticket-content] > div.ticket-holder > div > ul > li > a"
);
mainareas.forEach(mainarea => {
tickethrefs.forEach(tickethref => {
if ((mainarea.value = fancyID)) {
tickethref.style.backgroundColor = "#99ff66";
console.log(mainarea.value);
}
});
});
}
});
clearInterval(checkexist);
}, 7000);
已编辑
下面的 HTML 片段:
<div id="player-ticket-content">
<button class="btn btn-small" style="display: none; opacity: 1;">Merge</button>
<div class="loading" style="opacity: 0; display: none;">
<div class="spinner dotted"></div>
</div>
<div class="ticket-holder" style="display: block;">
<div class="tooltip-holder">
<ul class="tickets " style="display: block; max-height: 90px; opacity: 1;">
<li>
<input type="checkbox" name="ticket[]" value="40070921" disabled="disabled">
<a class="ticket zd" href="https://company.zendesk.com/agent/tickets/40070921" id="ticket-40070921"> <span class="ticket_status_label solved">solved</span> <span class="similarity" title="Similarity of ticket tags" style="background-color: rgb(255, 255, 255);"> <i class="icon-star"></i> </span> <span class="subject"><span>hello?</span></span>
</a>
</li>
<li>
<input type="checkbox" name="ticket[]" value="39711568" disabled="disabled">
<a class="ticket zd" href="https://company.zendesk.com/agent/tickets/39711568" id="ticket-39711568"> <span class="ticket_status_label closed">closed</span> <span class="similarity" title="Similarity of ticket tags" style="background-color: rgb(255, 174, 174);"> 78% </span> <span class="subject"><span>hello again!</span></span>
</a>
</li>
<li>
<input type="checkbox" name="ticket[]" value="21875024" disabled="disabled">
<a class="ticket zd" href="https://company.zendesk.com/agent/tickets/21875024" id="ticket-21875024"> <span class="ticket_status_label closed">closed</span> <span class="similarity" title="Similarity of ticket tags" style="background-color: rgb(255, 241, 241);"> 44% </span> <span class="subject"><span>woop woop</span></span>
</a>
</li>
</ul>
<div class="ticket-tip" id="ticket-tip-40070921" style="top: 24px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> Apr 22, 2019</li>
<li><strong>Assignee:</strong> Rufio</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>test!</p>
</div>
</div>
<div class="ticket-tip" id="ticket-tip-39711568" style="top: 48px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> Mar 26, 2019</li>
<li><strong>Assignee:</strong> Rufio</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>hello hello!</p>
</div>
</div>
<div class="ticket-tip" id="ticket-tip-21875024" style="top: 72px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> May 28, 2016</li>
<li><strong>Assignee:</strong> Robert</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>It's me again!
</p>
</div>
</div>
</div>
</div>
</div>
解决方案
(mainarea.value = fancyID)
是一个任务。你想要的是一个比较。使用(mainarea.value === fancyID)
. 另外,您没有考虑tickethref.id
实际是否匹配fancyID
,它只是为所有tickethref
s 着色。
您需要更改 if 条件
if ((mainarea.value === fancyID && tickethref.id.includes(fancyID))) {
tickethref.style.backgroundColor = "#99ff66";
console.log(mainarea.value);
}
var checkexist = setInterval(function() {
var tickets = document.querySelectorAll("[id^=ticket-tip-] > div > ul > li");
tickets.forEach(ticket => {
if (ticket.innerHTML.indexOf("Rufio") !== -1) {
var ticketid = ticket.parentNode.parentNode.parentNode.id;
var fancyID = ticketid.replace("ticket-tip-", "");
var mainareas = document.querySelectorAll(
"[id^=player-ticket-content] > div.ticket-holder > div > ul > li > input"
);
var tickethrefs = document.querySelectorAll(
"[id^=player-ticket-content] > div.ticket-holder > div > ul > li > a"
);
mainareas.forEach(mainarea => {
tickethrefs.forEach(tickethref => {
if ((mainarea.value === fancyID && tickethref.id.includes(fancyID))) {
tickethref.style.backgroundColor = "#99ff66";
console.log(mainarea.value);
}
});
});
}
});
clearInterval(checkexist);
}, 100);
<div id="player-ticket-content">
<div class="ticket-holder" style="display: block;">
<div class="tooltip-holder">
<ul class="tickets " style="display: block; max-height: 90px; opacity: 1;">
<li>
<input type="checkbox" name="ticket[]" value="40070921" disabled="disabled">
<a class="ticket zd" href="https://companyname.zendesk.com/agent/tickets/40070921" id="ticket-40070921"> <span class="ticket_status_label solved">solved</span> </a>
</li>
<li>
<input type="checkbox" name="ticket[]" value="39711568" disabled="disabled">
<a class="ticket zd" href="https://companyname.zendesk.com/agent/tickets/39711568" id="ticket-39711568"> <span class="ticket_status_label closed">closed</span> </a>
</li>
<li>
<input type="checkbox" name="ticket[]" value="21875024" disabled="disabled">
<a class="ticket zd" href="https://company.zendesk.com/agent/tickets/21875024" id="ticket-21875024"> <span class="ticket_status_label closed">closed</span> <span class="similarity" title="Similarity of ticket tags" style="background-color: rgb(255, 241, 241);"> 44% </span> <span class="subject"><span>text here!</span></span>
</a>
</li>
</ul>
<div class="ticket-tip" id="ticket-tip-40070921" style="top: 22px; left: 3px; display: none;">
<div class="comment">
<ul>
<li><strong>Date:</strong> Apr 22, 2019</li>
<li><strong>Assignee:</strong> Rufio </li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>text here!</p>
</div>
</div>
<div class="ticket-tip" id="ticket-tip-39711568" style="top: 26px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> Mar 26, 2019</li>
<li><strong>Assignee:</strong> Rufio</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>more text!</p>
</div>
</div>
<div class="ticket-tip" id="ticket-tip-21875024" style="top: 50px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> May 28, 2016</li>
<li><strong>Assignee:</strong> Robert</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>Oh hey, text!</p>
</div>
</div>
</div>
</div>
</div>
我觉得你的 for 循环是不必要的。如果您正在使用 id,它们应该是唯一的。我已经对其进行了修改以使其更简单。查看tickethref
选择器。
var checkexist = setInterval(function() {
var tickets = document.querySelectorAll("[id^=ticket-tip-] > div > ul > li");
tickets.forEach(ticket => {
if (ticket.innerHTML.indexOf("Rufio") !== -1) {
var ticketid = ticket.parentNode.parentNode.parentNode.id;
var fancyID = ticketid.replace("ticket-tip-", "");
var tickethref = document.querySelector(
`[id^=player-ticket-content] > div.ticket-holder > div > ul > li > a[id=ticket-${fancyID}]`
);
if (tickethref) {
tickethref.style.backgroundColor = "#99ff66";
}
}
});
clearInterval(checkexist);
}, 100);
<div id="player-ticket-content">
<div class="ticket-holder" style="display: block;">
<div class="tooltip-holder">
<ul class="tickets " style="display: block; max-height: 90px; opacity: 1;">
<li>
<input type="checkbox" name="ticket[]" value="40070921" disabled="disabled">
<a class="ticket zd" href="https://companyname.zendesk.com/agent/tickets/40070921" id="ticket-40070921"> <span class="ticket_status_label solved">solved</span> </a>
</li>
<li>
<input type="checkbox" name="ticket[]" value="39711568" disabled="disabled">
<a class="ticket zd" href="https://companyname.zendesk.com/agent/tickets/39711568" id="ticket-39711568"> <span class="ticket_status_label closed">closed</span> </a>
</li>
<li>
<input type="checkbox" name="ticket[]" value="21875024" disabled="disabled">
<a class="ticket zd" href="https://company.zendesk.com/agent/tickets/21875024" id="ticket-21875024"> <span class="ticket_status_label closed">closed</span> <span class="similarity" title="Similarity of ticket tags" style="background-color: rgb(255, 241, 241);"> 44% </span> <span class="subject"><span>text here!</span></span>
</a>
</li>
</ul>
<div class="ticket-tip" id="ticket-tip-40070921" style="top: 22px; left: 3px; display: none;">
<div class="comment">
<ul>
<li><strong>Date:</strong> Apr 22, 2019</li>
<li><strong>Assignee:</strong> Rufio </li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>text here!</p>
</div>
</div>
<div class="ticket-tip" id="ticket-tip-39711568" style="top: 26px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> Mar 26, 2019</li>
<li><strong>Assignee:</strong> Rufio</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>more text!</p>
</div>
</div>
<div class="ticket-tip" id="ticket-tip-21875024" style="top: 50px; left: 3px; display: none;"> <span class="nub"><span></span></span>
<div class="comment">
<ul>
<li><strong>Date:</strong> May 28, 2016</li>
<li><strong>Assignee:</strong> Robert</li>
<li><strong>Requester:</strong> Customer</li>
</ul>
<p>Oh hey, text!</p>
</div>
</div>
</div>
</div>
</div>
推荐阅读
- python - TensorFlow Jupyter Notebook 中的 Matplotlib
- highcharts - 动态更改条形颜色 - highcharts
- git - 从裸 git 存储库推送
- swift - 转换 2 个类似的计算属性以在 Swift 中使用 1 个可重用函数?
- python - 使用正则表达式从字符串列表中解析 ID
- javascript - 为什么我使用 splice 时我的功能不起作用?
- java - 在请求正文中使用时配置属性未自动装配?
- python - 当整数字段中的字符串时,Django Queryset 崩溃
- c# - Action 方法的 JSON Camel Case 属性
- neo4j - neo4j 索引失败,属性大小太长