2011-11-28 50 views
3
<div id="button"> 
Click me 
</div> 

<div id=item1> //loads with a dashed border 
</div> 

<div id=item2> //loads with a solid border 
</div> 

<div id=item3> //loads with a solid border 
</div> 

腳本部分下一格:如何選擇不具有一定的CSS類

var eventNext = document.getElementById("button"); 
eventNext.addEventListener("click", move, false); 

function move() 
{ 

} 

我會放在移動功能得到什麼,它沒有虛線下一格項目邊框,並使其虛線,並將當前項目的邊框固定? (如果有下一個項目)?

+1

你知道JavaScript庫的jQuery?如果沒有,你可能想要使用它。它使得在Javascript中執行大多數事情變得更加容易,掩蓋了跨瀏覽器的不兼容性,因此您不必爲它們編寫特殊代碼,並且擁有大量有用的插件,可以爲您節省大量時間來重新發明輪子。值得注意的是,[addEventListener](https://developer.mozilla.org/en/DOM/element.addEventListener)與瀏覽器有點不同,而[jQuery Event對象](http://api.jquery。 com/category/events/event-object /)在各個瀏覽器中都是可靠的。 –

+0

是數字項目1,2,3,4等預定義?

之間的項目
之間是否有任何其他元素/文本? – david

+0

僅供參考如果您不想使用jQuery,您可以使用與jizz相同的複雜選擇器,但如果您仍然有@ConspicuousCompiler描述的問題,請使用與Sizzle相同的http://sizzlejs.com/。請參閱http://stackoverflow.com/questions/3952817/decoupling-jquery-sizzle。從perf視圖來看,CDN jQuery的最後一個版本可能已經在用戶緩存中,不需要使用「only」Sizzle :) – FelipeAls

回答

2

下面是用jQuery的一種方式,如果使用這個庫恰好是一個選擇:

首先,給它可以變成虛線每格,「標記類」

<div id="item1" class="itemWhichCanBeDashed"> 
    //loads with a dashed border 
</div> 
<div id="item2" class="itemWhichCanBeDashed"> 
    //loads with a solid border 
</div> 
<div id="item3" class="itemWhichCanBeDashed"> 
    //loads with a solid border 
</div> 

然後創建一個虛線邊框樣式:

<style type="text/css"> 
    .dashed { border-style: dashed; } 
</style> 

然後,衝這不是已經破滅下一格:

$("div.itemWhichCanBeDashed:not(.dashed):first").addClass("dashed"); 

這將選擇與類itemWhichCanBeDashed所有div,但確實有附dashed類,則採取第一個,然後添加類dashed

如果你想第一個div爲已經虛線,然後用虛線類渲染它。

我不確定究竟是什麼使當前股利固體的要求是,但它應該是一個簡單的擴展。

編輯

要在項目舉辦的jQuery,你可以從谷歌鏈接到它:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>

如果你的用戶最近訪問過被鏈接到同一個文件一個站點,它可能會被緩存。如果沒有,它只有大約92K的下載。

1

如果您使用類似jquery的js框架,這會更容易。這是因爲添加引用您的head這樣簡單:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

使用jQuery,代碼將

var lastChanged; 

$(document).ready(function() { 
    lastChanged = $('#item1'); 

    $('#button').click(function() { 
     $(lastChanged).css("border", "1px solid #000"); 
     $(lastChanged).next().css("border", "1px dashed #000"); 
     lastChanged = $(lastChanged).next(); 
    }); 
}); 

這是對的jsfiddle - http://jsfiddle.net/JKYue/

+0

不知道誰低估了你,但是這個答案看起來不錯。我認爲我們都是一個討厭jQuery答案的人的受害者,而這些答案在我之前實際上已經看到了+1。 –

3
var eventNext = document.getElementById("button"); 
eventNext.addEventListener("click", move, false); 

function move() { 
    if(eventNext) { 
     if(eventNext.id !== 'button') { 
      eventNext.className = 'solidBorder'; 
     } 
     eventNext = eventNext.nextElementSibling; 
     if(eventNext) { 
      eventNext.className = 'dashBorder'; 
     } 
    } 
} 

.dashBorder { 
    border: 2px dashed blue; 
} 
.solidBorder{ 
    border: 2px solid blue; 
} 

或使用jQuery

var eventNext = $("#button").bind("click", move); 

function move() { 
    if(eventNext.length) { 
     if(eventNext.attr('id') !== 'button') { 
      eventNext.attr('class', 'solidBorder'); 
     } 
     eventNext = eventNext.next(); 
     if(eventNext.length) { 
      eventNext.attr('class', 'dashBorder'); 
     } 
    } 
} 

,如果你需要支持不支持nextElementSibling瀏覽器,使用該functoin代替。

function next(elem) { 
    while((elem = elem.nextSibling) && (elem.nodeType !== 1)); 
    return elem; 
} 
+0

'nextElementSibling'是非常不安全的跨瀏覽器。 – eyelidlessness

+0

這是真的,但問題使用addEventListener,並且支持它的大多數瀏覽器也支持nextElementSibling。 – shredder

+0

這是...不正確。在Firefox 1.0(實際上是之前的版本),Safari 1.0,Chrome 1.0,Opera 7和IE 9中添加了addEventListener。在HTML5 **中添加了「nextElementSibling」,這在大多數情況下並不在地平線上釋放。值得注意的是,它直到3.5年才被添加到Firefox中。我無法在其他瀏覽器上找到數據,但重要的是值得注意的是作爲一個警告。 – eyelidlessness

0

看是否能幫助您開始

<button onclick="nextItem()">Click me</button> 


    var nextItem = (function() { 

    var arr_item, arr_len, intIdx, currentItemInt; 

    arr_item = ["item1", "item2", "item3"]; 

    arr_len = arr_item.length; 
    intIdx = -1; 
    currentItemInt = ""; 

    return function(){ 

     for (var j= 0; j < arr_len; j++) { 

      var elm = document.getElementById(arr_item[j]); 
      var os = (elm.currentStyle) ? elm.currentStyle["borderStyle"] : window.getComputedStyle(elm,"").getPropertyValue('border-top-style'); 

      if(os == "dashed"){ 
      intIdx = j; 
      //alert(j) 
      currentItemInt = arr_item[j + 1]; 
      } 
    } 

// alert(arr_item[intIdx]) 

    if(intIdx < arr_item.length-1){ 

    document.getElementById(arr_item[intIdx]).style.border = "white dashed"; 
    document.getElementById(currentItemInt).style.border = "black dashed"; 

    } 
} 
}()); 
相關問題