2013-08-26 12 views
6

我有一個頁面,每次更改輸入字段的ID。例如,如果我現在訪問該頁面,則ID可以是"stack_15_overflow",下一次可以是"stack_293_overflow"如何接受getElementById(stack_ * _overflow)之間的任何字符?

我想使用通配符值getElementById,如"stack_ * _overflow"(其中*匹配任何東西),讓有關的任何輸入欄開始和一些特定文本結尾,不管是在什麼之間的文本價值。

代碼:

function HelloId(string){ 
    var name=string 
    document.getElementById('stack_*_overflow').value=name; 
} 
+4

如果你控制HTML使用一個類,不要做這個「怪異」選擇的東西。比它是一個簡單的電話。 – epascarello

+0

閱讀此,它也將幫助http://stackoverflow.com/questions/5376431/wildcards-in-jquery-selectors –

回答

5
var elements = document.querySelectorAll('[id^="stack_"][id$="_overflow"]'); 
+0

爲什麼'querySelectorAll'?這是通過'id'得到一個元素,它應該只返回1個元素...... – Ian

+1

@Ian'*'是一個通配符(在問題中)。這將選擇許多不同ID的元素。 – Paulpro

+1

@Ian,好吧,我想他可以用不同的ID按照相同的模式有很多輸入。由於OP已經使用jQuery,因此在這裏使用'querySelectorAll'更加可疑。 – plalx

5

使用jQuery的attribute starts withattribute ends with選擇:

$("[id^='stack'][id$=overflow]"); 

注意,這些選擇都是昂貴的,指定元素的類型可以提高性能:

$('element').filter("[id^='stack'][id$=overflow]"); 
+0

您是否在談論這種」昂貴「 m非常確定'querySelectorAll'原生支持這些屬性選擇器,所以我不明白你爲什麼要用'.filter()強制執行2個DOM查詢「這對於一個*自定義jQuery選擇器*是不同的,我非常確定選擇器是從右到左計算的,所以添加'element'部分不會加速任何事情,它只是對結果集進行過濾。雖然我可能是錯的,但它可能只是當你在選擇器中有一個空格,這些部分從右到左進行評估 - 但是每個「組」都從左到右進行評估 – Ian

2

您不能使用getElementById實現這一目標。 更好的解決方案是querySelectorquerySelectorAll,您可以獲得對CSS選擇器的全面支持。

Reference at MDN

你需要這2個屬性選擇:

把那與特定的字符串開始元素

document.querySelector('[id^="stack_"]'); 

獲取元素包含特定字符串

document.querySelector('[id*="stack_"]'); 

結束與特定的字符串

document.querySelector('[id$="_overflow"]'); 

通過結合部,並開始選擇獲取元素,將得到以下,並能實現你想要的結果:

document.querySelector('[id^="stack_"][id$="_overflow"]'); 

快樂的編碼!

+0

謝謝,像魅力一樣工作! – Byzantine

相關問題