2010-01-07 84 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

相關問題