2012-03-17 92 views
0

我正在嘗試製作一個JavaScript腳本,在一段時間後,它會打開新選項卡中元素的鏈接。我已經完成了所有與打開它有關的內容,但似乎無法正確排序我的元素列表。Javascript:通過虛假財產對元素進行排序

我的代碼如下:

function clickElement() { 
    var e=document.getElementsByTagName("area"); 

    for (var i=0;i < e.length; i++) { 
     var link=e[i].href; 
     window.open(link); 
    } 
} 

網頁上的代碼如下:

<area href="someWebsite" "=" shape="rect" coords="0, 0, 10, 10" /> 
<area href="someOtherWebsite" "=" shape="rect" coords="0, 10, 10, 20" /> 
<area href="someThirdWebsite" shape="rect" coords="10, 0, 20, 10" /> 
<area href="someFourthWebsite" "=" shape="rect" coords="10, 10, 20, 20" /> 

正如你所看到的,我通過使所有區域的名單出發頁面上的元素。我現在想對這些區域元素進行排序,因此第一個帶有「假」屬性的元素(在某些元素中的「=」在href =「」和shape =「」之間)是打開的元素。僞造的屬性會在每次頁面加載時發生變化,因此代碼無法知道第一,第二,第三或第四個是否有一個,除了以類似於我如何找到href屬性的方式進行檢查。

做你們任何人都知道如何做到這一點?由於沒有屬性名稱,只是一個值(「=」),我不能說「e [i]。=」。 請記住,我只能訪問Javascript,並且無法編輯HTML。

+0

井「=」無效,您應該添加一個正常的屬性或類,說「選擇我」 – epascarello 2012-03-17 13:08:13

回答

0

這不能與HTML工作,你向我們展示了......但這裏是解決

<area href="someWebsite" "=" shape="rect" coords="0, 0, 10, 10" /> 
<area href="someOtherWebsite" "=" shape="rect" coords="0, 10, 10, 20" /> 
<area href="someThirdWebsite" shape="rect" coords="10, 0, 20, 10" /> 
<area href="someFourthWebsite" first="1" shape="rect" coords="10, 10, 20, 20" /> 

這裏是JavaScript的

function clickElement() { 
    var e=document.getElementsByTagName("area"); 

    // First open the one with first attribute 
    for (var i=0;i < e.length; i++) if(e[i].getAttribute('first')) { 
     var link=e[i].href; 
     window.open(link); 
    } 

    // Then open others 
    for (var i=0;i < e.length; i++) if(!e[i].getAttribute('first')) { 
     var link=e[i].href; 
     window.open(link); 
    } 
} 
0

我不認爲你實現只是如何無效你的HTML是。我用你的一個<area>元素創建了一個頁面,在Firefox中打開它,並使用一些JavaScript來獲取屬性名稱和值。它們是:

name   value 
--------  ------------------- 
href   someFourthWebsite 
"    shape= 
rect" 
coords  10, 10, 20, 20 

請注意,沒有shape="rect"屬性;而shape已成爲"屬性的一部分,而rect"已成爲單獨的屬性。 (本質上,Firefox允許在屬性名稱中使用",在這種情況下,沒有給出它作爲分隔符的任何特殊含義。顯然,其他瀏覽器可能會採取不同的處理方式:非常無效,並且所有投注都關閉。)

懷疑你的HTML通常是無用的,而不僅僅是爲了這個目的。

,有一兩件事你可以做的是檢驗的元素parentNodeinnerHTML,並找到第一"="是:

var totalHTML = 
    document.getElementsByTagName('area')[0].parentNode.innerHTML.toLowerCase(); 
var weirdAttrIndex = totalHTML.indexOf('"="'); 
var i = -1; 
var areaIndex = 0; 
while(true) 
{ areaIndex = totalHTML.indexOf('<area', areaIndex); 
    if(areaIndex < 0 || areaIndex > weirdAttrIndex) 
    break; 
    ++i; 
} 
window.open(document.getElementsByTagName('area')[i].href); 

我不希望這是非常可靠的,因爲在HTML表示即表示無效的情況下,誰知道會發生什麼?但這是一個開始。

相關問題