2011-11-28 23 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"; 

    } 
} 
}()); 
相关问题