当用户继续进行下一次点击时,如何让 JavaScript 清除之前的 onclick 元素?

How do I get JavaScript to clear the previous onclick element when a user moves on to the next click?

比如说,我有一个 HTML 站点,其中包含多个部分。

<html>
 .
 .
 .
<body>

<section class="" id="text1" name="texts">
<p> this is sample text yaday ayda yaday yada blah blah blah </p>
</section>

<section class="" id="text2" name="texts">
<p> this is sample text yaday ayda yaday yada blah blah blah </p>
</section>

<section class="" id="text3" name="texts">
<p> this is sample text yaday ayda yaday yada blah blah blah </p>
</section>
  <!-- and so on --------->
</body>
</html>

网站有两个简单的 css 规则;一个用于 "normal sections",另一个用于 "active sections".

<style>
section {
    margin-left: 10px;
    padding: 10px;
    position: relative;
    border-style: solid;
    border-width: 2px;

     box-sizing: border-box;
    width: 50%;
    float: left;
 }

section.active {
 width: 300px;
 height: 100px;
 background-color: yellow;
 box-shadow: 10px 10px 5px #888888;
}
</style>

javascipt 的 .onclick 属性 有助于定位被点击的部分。一旦我们有了点击部分,它的 class 属性 设置为 "active" 所以 section.active CSS 可以像这样应用:

Window.onload = init;
function init() {
var Elems = document.getElementsByName("texts")
for (var i = 0; i<Elems.length; i++) {
    Elems[i].onclick = dothis;
};

function dothis(eventObj) {
    var Celm = eventObj.target;
    var name = "active";
    Celm.className= name;
}
};

到目前为止一切顺利,但在这里我失去了控制力。如何让代码一次只标记一个活动部分?现在,它会在单击时将多个部分标记为活动状态。但我想做的是,一旦检测到活动部分,它应该自动清除最后单击或活动部分,代表 "only one active section at one time"。非常感谢。

从所有部分中删除 class名称 active 并仅为所需部分设置 active class。

Window.onload = init;
function init() {
var Elems = document.getElementsByName("texts");
for (var i = 0; i<Elems.length; i++) {
    Elems[i].onclick = dothis;
};

function dothis(eventObj) {    
    var Celm = eventObj.target;
    var name = "active";
    var Elems = document.getElementsByName("texts");

    // This will remove the className active from all sections
    Elems.className = Elems.className.replace( /(?:^|\s)active(?!\S)/ , '' );

    // Once all active sections are cleared, this selects the required section
    Celm.className= name;
}
};

为了让 "Active" class 只出现在一个元素上,您必须删除之前使用 class [=] 选择的元素的 "active" class 23=].

如果你想用jQuery来做,你可以简单地写下面的代码。

$('.Active').removeClass('Active');

使用Javascript:

好吧,没有使用 javascript 删除 class 的内置方法。你可以写一个自定义函数 "removeClass" 如下所示,然后直接这样调用它: removeClass('Active');

function removeClass(className) {
    // convert the result to an Array object
    var els = Array.prototype.slice.call(
        document.getElementsByClassName(className)
    );
    for (var i = 0, l = els.length; i < l; i++) {
        var el = els[i];
        el.className = el.className.replace(
            new RegExp('(^|\s+)' + className + '(\s+|$)', 'g'),
            ''
        );
    }
}

试试这个

$(function(){

 $('section').on('Click',function(){
  $('section.active').removeClass('active');
  $(this).addClass('active');

  });

})

您可以从 jquery.com 下载 jquery 这里是 documentation

http://jsfiddle.net/nL0kau9u/1/

function dothis(eventObj) {
    var Celm = eventObj.target;
    var name = "active";
   for (var i = 0; i<Elems.length; i++) {
       if(Elems[i]!=Celm) {
           Elems[i].className='';
       }
       else {
           Elems[i].className=name;
       }
};

}
};

函数执行此操作(eventObj){

var x = document.getElementsByClassName("active");    
for (var i = 0; i < x.length; i++) {    
    x[i].className = "";    
}


var Celm = eventObj.target;
var name = "active";
Celm.className= name;

}

又来一个,玩得开心^^

init();
function init() {

}

function dothis(test) {
    var Celm = test;    
    var classItem = document.getElementsByClassName("active");
    if (classItem.length > 0){        
        classItem[0].className = "";
        var name = "active";
        Celm.className= name;
    }else{        
        var name = "active";
        Celm.className= name;
    }
}
section {
    margin-left: 10px;
    padding: 10px;
    position: relative;
    border-style: solid;
    border-width: 2px;

     box-sizing: border-box;
    width: 50%;
    float: left;
 }

section.active {
 width: 300px;
 height: 100px;
 background-color: yellow;
 box-shadow: 10px 10px 5px #888888;
}
<section class="" id="text1" name="texts" onClick="dothis(this)">
<p> this is sample text yaday ayda yaday yada blah blah blah </p>
</section>

<section class="" id="text2" name="texts" onClick="dothis(this)">
<p> this is sample text yaday ayda yaday yada blah blah blah </p>
</section>

<section class="" id="text3" name="texts" onClick="dothis(this)">
<p> this is sample text yaday ayda yaday yada blah blah blah </p>
</section>

通过使用jQuery查看以下函数 http://api.jquery.com/removeclass/

http://api.jquery.com/addClass/

最后但并非最不重要的 http://api.jquery.com/toggleClass/

问候 R