无法修改<template>中首个div元素的ID问题求助
解决jQuery克隆模板无法修改根div ID的问题
我来帮你搞定这个问题!你现在遇到的核心问题是对jQuery对象的层级理解有误——你用find("div:first")找的是模板根div的子元素,而不是根div本身,所以才会修改到后面的div。
问题原因分析
你当前的代码里:
const $template = $( $('#single_feed')[0].innerHTML );
这行把模板的HTML字符串转换成了jQuery对象,这个对象直接包含的就是模板里的根div(也就是带FIRST_DIV ID的那个.ibox元素)。而find("div:first")是在这个根div的后代元素里查找第一个div,自然会定位到.ibox-title那个子div,而不是你想要修改的根元素。
解决方案1:直接修改根jQuery对象
只需要把find("div:first")去掉,直接操作$template本身即可:
$(".btn-RSS-single").click(function(e) { var idClicked = e.target.id; // 获取模板HTML并转为jQuery对象,此时$template就是根div const $template = $( $('#single_feed')[0].innerHTML ); // 直接修改根div的ID $template.attr("id", "NEW_ID_"+idClicked); $('#kolona_1').append($template); });
解决方案2:使用标准模板克隆API(更推荐)
HTML5的<template>元素有专门的content属性和克隆方法,这种方式更规范可靠,避免innerHTML可能带来的问题:
$(".btn-RSS-single").click(function(e) { var idClicked = e.target.id; // 获取模板元素 const template = document.getElementById('single_feed'); // 深克隆模板内容(true表示深拷贝) const templateContent = document.importNode(template.content, true); // 转为jQuery对象后修改根div的ID const $template = $(templateContent); $template.find('.ibox').attr("id", "NEW_ID_"+idClicked); // 或者用children().first()定位根div:$template.children().first().attr(...) $('#kolona_1').append($template); });
这两种方式都能精准修改你想要的那个根div的ID,你可以根据自己的习惯选择其中一种。
内容的提问来源于stack exchange,提问作者Passattz
相关产品推荐
相关产品推荐

