我正在为某人创建一个Greasemonkey脚本来更改他们的CRM(Zoho)创建的某些字段的显示,因为他们无权更改呈现的HTML。
这应该很容易,但Zoho决定创建正确的HTML对于屁股来说太麻烦了,我想,他们的HTML包含这样的内容:
<input type="text" maxlength="50" style="width: 100%;" class="textField" id="property(Phone)" name="property(Phone)"/>
ID包含空格和括号,它们在ID属性中无效,并且阻止我使用document.getElementById()来选择它们或使用jQuery来选择它们。
有没有人对如何抓住这个元素有任何想法?显然我可以通过其父元素中的索引或遍历DOM来获取它,但这两者都意味着如果字段的顺序发生变化,Greasemonkey脚本将停止正常工作,因为它将针对错误的元素
答案 0 :(得分:1)
这是什么浏览器?我认为Firefox,因为你提到了GreaseMonkey。但document.getElementById("property(Phone)")
似乎在Firefox 3.5中运行良好。
答案 1 :(得分:1)
您可以像这样转义括号:
$("#property\\(Phone\\)")
答案 2 :(得分:1)
您可以使用反斜杠转义空格和括号:
$('#property\\(Phone\\)').val('jQuery selected property(Phone)!');
$('#ab\\ cd\\ ef').val('jQuery selected ab cd ef!');
答案 3 :(得分:0)
你总是可以做一个document.getElementsByTagName('input'),然后浏览结果并将其与它的属性相匹配(比如它的类型和名称,类......)。效率不是很高,但我知道的唯一方法是使用任何订单(因为id无效)......
var inputs = document.getElementsByTagName('input');
if (inputs)
for (var i = 0; i < inputs.length; i++)
if (inputs[i].type == 'text' && inputs[i].name == 'SearchValue')
return inputs[i];
我很确定JQuery(或任何其他优秀的框架)与此代码段等效...
答案 4 :(得分:0)
JQuery可能无法使用#id语法找到它,但可能使用tagName [id = value]语法找到它...尝试一下,祝你好运。请参阅jQuery doc。