Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击DIV元素3次时替换它_Javascript_Jquery_Html_Replace_Element - Fatal编程技术网

Javascript 单击DIV元素3次时替换它

Javascript 单击DIV元素3次时替换它,javascript,jquery,html,replace,element,Javascript,Jquery,Html,Replace,Element,我想用一个不同的div元素替换一个特定的div元素,当它点击3次时。这是我试图用代码完成的唯一任务 我试着看了一些代码,但是它们都用get-go替换了它,它们没有给你一个数字来指定何时替换它 示例:已被用户单击3次。一旦超过这个数量,就用替换它。如果您知道如何使用JQuery,只需在div1上放置一个click事件处理程序。在该处理程序上,将单击计数器增加到3。如果达到3,则再次用JQuery替换div 如果要替换多个div,请使用计数器数组而不是单个计数器,或者通过JQuery修改用户特定的数

我想用一个不同的div元素替换一个特定的div元素,当它点击3次时。这是我试图用代码完成的唯一任务

我试着看了一些代码,但是它们都用get-go替换了它,它们没有给你一个数字来指定何时替换它


示例:
已被用户单击3次。一旦超过这个数量,就用

替换它。如果您知道如何使用JQuery,只需在div1上放置一个click事件处理程序。在该处理程序上,将单击计数器增加到3。如果达到3,则再次用JQuery替换div


如果要替换多个div,请使用计数器数组而不是单个计数器,或者通过JQuery修改用户特定的数据属性。

主要思想是开始侦听第一个div上的单击事件并对其进行计数。 下面的代码显示了这个概念。首先,我们将第一个div放入变量中,以便能够在其上创建事件侦听器,还可以创建初始值为0的
count
变量。然后预生成第二个div,稍后将替换第一个div。 最后一部分也是显而易见的:将事件侦听器放在
div1
上,它将递增
count
,并检查每次单击时它是否等于3

const div1=document.querySelector('#id-1');
让计数=0;
//预先制作的第二个div,以备将来更换
const divToReplace=document.createElement('div');
divToReplace.id='id-2';
divToReplace.innerText='div2';
div1.addEventListener('click',()=>{
计数++;
如果(计数==3){
div1.parentNode.replaceChild(divToReplace,div1);
}
});
div 1
更改id属性不是一个好主意,相反,您可以按如下方式使用数据-属性:

var count=0;//将变量声明为计数器
$('#1')。单击(函数(){
count++;//每次单击时将计数器增加1
if(count==3)//检查计数器
$(this.data('id','3');//设置数据属性
console.log($(this.data('id'));
});


单击
您可以编写一个JavaScript函数来跟踪您单击特定DOM元素的频率(即带有
id=“1”
div
元素)。只要该元素被单击三次,它就会被另一个DOM元素替换,该元素也可以用JavaScript创建

var点击次数=0;
功能轨迹单击(el){
点击++;
如果(单击===3){
var newEl=document.createElement('div');
newEl.textContent='Div3';
newEl.id='3';
el.parentNode.replaceChild(newEl,el);
}
}

Div1
使用本机JavaScript,而不是依赖库(可能提供的所有好处),以下方法是可能的:

//一个命名函数,用于处理相关元素上的“click”事件;
//EventObject是从EventTarget自动传入的。addEventListener()
const replaceOn=(事件)=>{
//缓存单击的元素(因为我使用的是箭头函数
//语法我们无法使用“this”获取单击的元素):
设el=event.target,
//创建新元素:
newNode=document.createElement('div'),
//在此之后检索元素上设置的当前单击次数
//数字变为零,我们替换元素
//将数字的字符串表示形式转换为以10为基数的数字:
current=parseInt(el.dataset.replaceOn,10);
//在这里,我们用递减的数字更新当前数字(我们使用
//“--”运算符将数字减少1),然后更新
//用新编号替换属性值上的数据:
el.dataset.replaceOn=--当前;
//在这里,我们发现该数字现在是否为零:
如果(当前===0){
//如果是这样,我们将向创建的元素写入一些内容:
newNode.textContent=“原始元素已被替换。”;
//这里我们使用Element.replaceWith()替换当前
//具有新newNode元素的“el”元素:
el.替换为(新节点);
}
};
//这里我们使用[data replace on]属性选择器进行搜索
//通过文档查找具有该属性的所有元素,以及
//使用NodeList.forEach()迭代该节点列表:
document.querySelectorAll(“[data replace on]”)。forEach(
//使用箭头函数,我们将引用传递给当前
//节点列表的节点到函数,这里我们使用
//用于绑定replaceOn函数的EventTarget.addEventListener()
//(注意故意缺少括号)来处理
//“单击”事件:
(element)=>element.addEventListener('click',replaceOn)
);
*{
框大小:边框框;
保证金:0;
填充:0;
}
div{
边框:1px实心#000;
显示:内联块;
填充:0.5em;
边界半径:1米;
}
div[数据替换开始]{
光标:指针;
}
div[数据替换开始]::之前{
内容:attr(数据替换上);
}


那么您是否尝试过自己介绍这个计数器?你至少能为这种交互编写伪代码吗?你有什么特别的问题吗?我们总是很乐意帮助和支持新的程序员,但你需要先帮助自己。之后,如果您有问题,请发布您尝试过的内容,并清楚解释哪些内容不起作用,然后提供。读这本书。另外,请务必阅读本手册,只有在使用jQuery时才有效。但是,代码也可以很容易地重构以在没有这种依赖关系的情况下工作。我希望现在情况更清楚了。