2010-01-07 61 views
1

我正在制作一个Greasemonkey脚本,让某人更改其CRM(Zoho)创建的某些字段的显示,因为他们无权访问更改呈现HTML。使用Javascript/jQuery访问具有不正确id属性的HTML元素

这应该是很容易的,但百会决定创建适当的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脚本就会停止正常工作,因为它会针对错误的元素。

回答

1

可以逃避的空间,并使用反斜线括号:

$('#property\\(Phone\\)').val('jQuery selected property(Phone)!'); 
$('#ab\\ cd\\ ef').val('jQuery selected ab cd ef!'); 
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(或任何其他好的框架)具有相当于该snippet ...

0

JQuery可能找不到它使用#id语法,但可能可能找到它使用tagName [id = value]语法...试试吧,祝你好运。请参阅jQuery doc

1

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

1

可以逃脱括号这样的:

$("#property\\(Phone\\)") 
+0

您可以通过一分钟击败了我,但你忘了“#”在选择器的开始。 :) – Annabelle 2010-01-07 18:28:05

+0

修好了,谢谢! – 2010-01-07 18:30:36

相关问题