回答你的问题:
"Could I use the title to narrow the selection? Or would the ID make more sense?"
一个稳定的数字id是
通常
你最好的选择。标题或其他文本受制于:编辑或翻译/国际化。但如果id从一页到另一页或从重新加载页面更改;不要使用它。
该代码有几个问题:
-
waitForDropdown()
既没有标准也没有定义。
问题应包含
MCVEs
。
在本例中,它看起来可能是
waitForKeyElements
--它现在是通用的、标准的、经过战斗考验的。
-
选择器:
option[value='See Notes']
与任何HTML都不匹配。
提到
the jQuery Attribute selectors docs
。
-
jNode.val('See Notes');
正在尝试设置无效值。
-
jNode。val(“见注释”);
正在操作
<div class="control">
。它需要在
<select>
。
无论如何
the companion question
演示了自顶向下的树遍历以获取正确的节点。因此,在这里,我将演示一种自下而上的方法。它也是
支持AJAX
,与其他答案不同。
提到
the jQuery Tree Traversal docs
。
这里是
完整的用户脚本
显示如何基于关联节点/id区分选项。(用户脚本只是第一个灰色块):
waitForKeyElements (".control > select > option[value$='Cleaned']", selectId302Value);
function selectId302Value (jNode) {
var idNode = jNode.closest (".field-content").prev (".item-data");
if (idNode.length === 0) {
console.error ("Page structure changed or invalid in selectId302Value().");
return;
}
if (idNode.text ().includes ('"302"') ) {
var evt = new Event ("click");
jNode[0].dispatchEvent (evt);
jNode.parent ().val(jNode.val () );
evt = new Event ("change");
jNode.parent ()[0].dispatchEvent (evt);
}
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="//greasyfork.org/scripts/2199-waitforkeyelements/code/waitForKeyElements.js"></script>
<div class="field tabular">
<span class="item-data">{"Id":"302"}</span>
<div class="field-content">
<div class="title" title="Dropdown A">Dropdown A</div>
<div class="data">
<div class="errors"></div>
<div class="control">
<select>
<option value="Not Checked" selected="selected">Not Checked</option>
<option value="Checked & Cleaned">Checked & Cleaned</option>
<option value="Not Applicable">Not Applicable</option>
<option value="See Section Notes">See Notes</option>
</select>
</div></div></div>
<span class="item-data">{"Id":"777"}</span>
<div class="field-content">
<div class="title" title="Dropdown B">Dropdown B</div>
<div class="data">
<div class="errors"></div>
<div class="control">
<select>
<option value="Not Checked" selected="selected">Not Checked</option>
<option value="Checked & Cleaned">Checked & Cleaned</option>
<option value="Not Applicable">Not Applicable</option>
<option value="See Section Notes">See Notes</option>
</select>
</div></div></div>
</div>
运行代码段以查看其实际操作。