2012-04-26 66 views
4

我怎樣才能得到一個輸入元素的名稱屬性以特定值結束使用JavaScript?

我發現這個$('input[name$="value"]')方法可在jQuery

有沒有像JavaScript中可用的功能?由於某些原因,我無法使用jQuery。

+0

JQuery是用JavaScript編寫的,所以在你的函數中包含JQuery源代碼:P – 2012-04-26 14:12:26

+0

他說他不能使用jQuery。 – 2012-04-26 14:12:39

+4

由於某種原因?解決這個問題,而不是解決這個問題。 – 472084 2012-04-26 14:13:11

回答

21

我很驚訝,沒有人提到過這一點呢。您是否嘗試過:

var elements = document.querySelectorAll('input[name$="value"]'); 

如果瀏覽器支持querySelectorAll方法這隻會工作,但它是如果支持,找到了jQuery使用下面。

下面是列出的方法瀏覽器支持表:我要去承擔

When can I use querySelector/querySelectorAll?

+0

提前五十秒......嘆息...... =/+1 – 2012-04-26 14:18:06

+0

這是一個很好的答案。+1我現在可以直接刪除我的。:/ – 2012-04-26 14:18:38

+0

爲什麼還要麻煩發佈這個?OP沒有學到任何東西,還有更好的選項可用 – 2012-04-26 17:55:35

-1

該方法返回元素

var elements = document.getElementsByName("value"); 
+0

Downvote,因爲雖然答案是正確的,但它不能與問題中描述的問題相提並論。它是[名稱$ =「value」] ...介意$ – devnull69 2012-04-26 14:18:15

+0

這會得到名稱爲「value」的任何內容,其中的選擇器僅抓取輸入標籤。 – Neil 2012-04-26 14:24:33

+0

是的,你需要'getElementsByTag(「input」)',然後遍歷該數組以找到以「value」結尾的元素。 – 2012-04-26 14:38:34

2
陣列

你可以這樣做:

console.log(document.getElementsByName("value")[0]); 

或者,如果你想找到第一input元素名稱中帶有「值」:

var searchString = "value"; 
var elems = document.getElementsByTagName('input'), wantedElem; 

for(var i = 0, len = elems.length; i < len; i++) { 
    if(elems[i].name.lastIndexOf(searchString) == elems[i].name.length-searchString.length) { 
     wantedElem = elems[i]; 
     break; 
    } 
} 

console.log(wantedElem); 
+0

將它改爲'if(elems [i] .name.lastIndexOf(「value」)== elems [i] .name.length-5',它應該只提取那些元素ENDING on「value」 – devnull69 2012-04-26 14:20:09

+0

啊,對。讓我們改進一下,編輯更多 – 2012-04-26 14:21:00

+0

名稱$ =值並不意味着有一個屬性「名稱$」,而是有一個屬性「名稱」結束於給定的值 – devnull69 2012-04-26 14:22:07

3

你已經放置屬於他們的地方(在<form>元素)這些<input>元素。

通過DOM API遍歷表單控件的最簡單方法是通過HTMLFormElement::elementsHTMLCollection。它允許命名遍歷,對於特定元素非常方便。

例如,請考慮下面的標記:

<form action="./" method="post" name="test" 
    onsubmit="return false;"> 
    <fieldset> 
     <legend>Test Controls</legend> 
     <input name="control_one" type="text" 
      value="One"> 
     <input name="control_two" type="text" 
      value="Two"> 
     <input name="control_three" type="text" 
      value="Three"> 
    </fieldset> 
</form> 

此之後,需要一些簡單的文檔樹遍歷。這是它的全部:

var test = document.forms.test, 
    controls = test.elements; 

function traverseControl(control) 
{ 
    var patt = /one$/, 
     match = patt.test(control.name); 
    if (match) { 
     // do something 
     console.log(control); 
    } 
} 

function traverseControls(nodes) 
{ 
    var index; 
    if (typeof nodes === "object" && 
     nodes.length) { 
     index = nodes.length - 1; 
     while (index > -1) { 
      traverseControl(
       nodes[index] 
      ); 
      index -= 1; 
     } 
    } 
} 

traverseControls(controls); 

正如你所看到的,它確實不是太困難。使用HTMLCollection的結果是新舊瀏覽器的支持。由於HTMLCollection在DOM 0中實現,因此得到廣泛支持。

未來,我會建議使用遍歷模式,這遠不如模糊。如果您控制了正在遍歷的文檔樹(即您編寫了標記),則應該已經知道控件的控制。否則,必須使用類似前述的模糊方法。

工作實施例:http://jsbin.com/epusow

更多,this article可以細讀。

相關問題