1

我正在为某人制作一个 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 脚本将停止正常工作,因为它会定位错误的元素.

4

5 回答 5

1

这是什么浏览器?Firefox,我想,因为你提到了 GreaseMonkey。但document.getElementById("property(Phone)")似乎在 Firefox 3.5 中工作得很好。

于 2010-01-07T18:23:20.750 回答
1

您可以像这样转义括号:

$("#property\\(Phone\\)")
于 2010-01-07T18:24:25.853 回答
1

您可以使用反斜杠转义空格和括号:

$('#property\\(Phone\\)').val('jQuery selected property(Phone)!');
$('#ab\\ cd\\ ef').val('jQuery selected ab cd ef!');
于 2010-01-07T18:24:57.617 回答
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(或任何其他好的框架)有一个相当于这个片段......

于 2010-01-07T18:19:48.687 回答
0

JQuery 可能无法使用#id 语法找到它,但可能会使用 tagName[id=value] 语法找到它……试试吧,祝你好运。请参阅jQuery 文档

于 2010-01-07T18:21:40.010 回答