2012-07-13 37 views
0

好吧,我有一個簡單的HTML文檔:新的JavaScript不明白陣列

<head> 
</head> 

<body> 
<div id="notInvolved"> This div is static</div> 
<div id="thing01"></div> 
<div id="thing02"></div> 
<div id="thing03"></div> 
</body> 

我想使用一個外部JavaScript來處理的div。 我的計劃是以下

  1. 創建名爲divCounter
  2. 由ID東西##
  3. 獲取陣列
  4. 的長度在for循環中由陣列大小goverened添加的div陣列,一次加載一個div,添加一些數據,移動到下一個div並添加更多的數據,直到我離開div。

我顯然不知道如何建立一個動態數組,但...(我不能做到這一點靜態,我不知道我最終有多少東西## div一定有)

我想我可以做var divCounter = [document.getElementById("thing"+ * + *)];,那會添加字符串(例如thing01,Thing02)。但那不行。你如何設置getElementById的通配符?如果你不能如何做到這一點?

有沒有辦法做到這一點還是我找錯了樹?我討厭成爲一個新手... ...

+5

你可以顯示你寫的代碼到目前爲止嗎? – Ibu 2012-07-13 17:37:33

+0

目前尚不清楚你想要做什麼。在描述你如何解決它之前,試着花一些時間清楚地描述它。 – 2012-07-13 17:38:20

+0

我們很樂意提供幫助,但請出示您的完整代碼。你只顯示一行。 – Utkanos 2012-07-13 17:39:24

回答

3

一般而言(因爲你提供了很少的代碼工作)ID應該是你應該使用的東西,當事情是獨一無二的,應該在需要事物時使用類可以分組訪問。它更有道理做這樣的事情:

<body> 
    <div id="notInvolved"> This div is static</div> 
    <div id="thing01" class="affected"></div> 
    <div id="thing02" class="affected"></div> 
    <div id="thing03" class="affected"></div> 
</body> 

一旦你擁有的東西,團結他們,你可以使用document.getElementsByClassName('affected')對它們進行檢索。這可能比嘗試使用for循環或其他構造檢索單個元素更有意義。

0

您可以使用通配符選擇頁面上的所有元素,然後使用正則表達式來過濾元素。

var all =document.getElementsByTagName('*'); 
var r = /^thing\d+$/; 
var test = function(el){ 
     return r.test(el.getAttribute('id')); 
} 
var elements = []; 
for(var i=0,l=all.length;i<l;i++) 
    If(test(all[i])) 
     elements.push(all[i]); 
+1

你不能在'getElementById'中使用通配符,而正則表達式處理字符串,而不是DOM元素。 – jbabey 2012-07-13 17:44:42

+0

我知道,看到更新。我正在寫一個更一般的答案。順便說一句,我是移動的,這個例子有點晚了。 – 2012-07-13 17:55:24

+0

你要循環瀏覽頁面上的每個元素,並針對正則表達式測試它們的ID?我想不出一個更壞的方法來做到這一點:P – jbabey 2012-07-13 17:57:13

0

你應該要修改,然後對結果進行循環從getElementsByClassName動態的div使用類:

var dynamicDivs = document.getElementsByClassName('dynamic'); 

for (var i = 0; i < dynamicDivs.length; i++) { 
    // do whatever you want with dynamicDivs[i] 
} 
+0

好的,謝謝你的幫助,除了我不能讓每個人都打印出名字。也許to.string? – 2012-07-13 18:02:47

+0

@AharonCharnov我不確定你的意思是「按名稱打印」?動態添加的div都需要在它們上面有'class =「dynamic」'(或者你喜歡的任何類名) – jbabey 2012-07-13 18:03:35

0

我沒有完全理解你正在試圖完成的任務。 無論如何,只要它有一個以字符串「thing」開頭的ID,給你一個如何向數組添加元素的想法,下面是一個簡單的例子,如何使用for循環, getElementByTagName函數以及如何訪問DOM元素的屬性。 你真正想要做什麼(向數組添加元素)是使用divCounter數組的push方法完成的。

var everyDiv = document.getElementsByTagName('div'); 
var divCounter = []; 
for(var i = 0; i < everyDiv.length; i++){ 
    var currentDiv = everyDiv[i]; 
    var currentID = currentDiv.id; 
    if (currentID != null && currentID.indexOf('thing') == 0){ 
     divCounter.push(currentDiv); 
    }; 
} 
var res = divCounter.length; 

當然,這是爲了清楚起見,我就已經接近從不同爲視角的問題,我會更coincise方式已編碼的。 我同意其他答案:在這些div中共享的類將是選擇這些元素的最佳方式。 相同(與同過處理方式)的事情的一個例子是:

var everyDiv = document.getElementsByTagName('div'), 
    divCounter = [], 
    i, currentID; 
for(i = 0; i < everyDiv.length; i++){ 
    currentID = everyDiv[i].id; 
    if (currentID && currentID.indexOf('thing') == 0){ 
     divCounter.push(everyDiv[i]); 
    }; 
} 

這是完全一樣的,但在開始變量的聲明。由於在JavaScript中,變量的作用域是函數,而不是代碼塊,因此非常適合在開始時使用單個「var」聲明啓動函數。

0
function load() { 
    var divTags = document.getElementsByTagName("div"); 
    var divArray = new Array(); 
    var j = 0; 
    for(i = 0; i < divTags.length; i++) { 
    if(divTags[i].id.substr(0,5) == "thing") { 
     divArray[j++] = divTags[i].id; 
    } 
    } 
    for(i = 0;i < divArray.length; i++) 
    alert(divArray[i]); 
}