javascript 模仿另一个的HTML元素

liwlm1x9  于 2022-12-17  发布在  Java
关注(0)|答案(3)|浏览(138)

听起来很疯狂,但我只是想知道我是否可以有一个元素(任何东西,小的或复杂的),然后在其他地方有一个克隆元素,完全模仿第一个元素上更改的所有内容。
我知道使用JavaScript和jQuery可以很容易地实现这样的功能,但是我想到的任何解决方案都涉及到每个变量(或独立修改的单独元素示例)
例如

<div class="class"></div>
<div class="class"></div>
<div class="class"></div>
$('.class').css('color','blue');

这段javascript / jQuery将选择每个元素示例,并将蓝色单独应用于每个元素。
我想知道的是,如果有一种方法来改变一个单一的元素,这将反映在元素副本。
所以克隆元素没有自己的属性可以单独修改,它们实际上使用了原始元素的属性,当原始元素的属性被修改时,克隆元素也会被修改,因为它们的内部状态引用了原始元素。
这样的构想存在吗?
我的推理是这样的:
如果你有1000个元素。每个元素都很大。一个元素包含如下内容:

.attributes
.baseURI
.childNodes
.children
.className

等等......并且每个元素的EACH属性都是COPIED。这就是.baseURI.clientWidth的1000个副本,对吗?如果是这样的话,那肯定很糟糕。
如果有一个元素,那么就会有一个.attributes、.children等,并且所有克隆的元素都会使用它们。

编辑

好吧,再澄清一下。
假设你有一个动态的选择框,它的选项可以根据事件驱动的javascript/ AJAX 应用程序中发生的各种事件而改变,然后你必须在页面的不同位置有同一个选择框的多个副本,处理一个选择框,并让所有其他的html副本自动改变会更有效。而不必用JavaScript来处理它们。我认为这显然必须是某种本地支持,但我甚至不确定这种本地支持是否存在。
它可能是一个HTML5规范

ghhkc1vu

ghhkc1vu1#

你有办法改变一个独特的东西,并同时应用于所有元素,这是一个:
CSS。
如果您有许多相同的类,例如:.testclass,并且您希望更改所有background-color,首先,创建一个名为test.css的文件,并将其放入页面的同一根文件夹中。
将此css放入您的test.css

.testclass{ background-color: red;}

执行该javascript代码:

$('head').append( $('<link rel="stylesheet" type="text/css" />').attr('href', 'test.css') );

然后javascript将使页面加载一个新的css,其中包含用于apply的背景色代码,以应用于所有具有类**.testclass**的元素。
这样,您就不会进行迭代并同时应用于所有元素。
--编辑--
我知道你想要什么了。我已经找到了如何克隆DOM,我克隆了一个,然后追加到正文,看这个:

$('your_select_identifier').change(function(e){ //when your select has changed...
  $('the_other_select').remove();//here i removed the old one.
  document.body.appendChild($('your_select_identifier')[0].cloneNode()); //here i cloned the DOM Node of your main select and did append on the document body as the new select.
});

我希望你能做你想要的:)(我已经花了一段时间与kkk。

u5rb5r59

u5rb5r592#

如果我没理解错的话,您可以使用.each()
迭代一个jQuery对象,为每个匹配的元素执行一个函数。
示例:

$('.class').each(function() {
  $(this).css('color','blue');
});

Demo .
更新日期:
你也可以这样做:

$("<style>")
        .prop("type", "text/css")
        .html("\
        .class {\
        color: blue;\
        }")
        .appendTo("head");
disbfnqx

disbfnqx3#

我想你要找的是一个可以应用于所有1000个元素的CSSStyleRule。你只需要改变一个CSSStyleRule的属性,而不需要循环遍历所有1000个元素并改变每个元素的样式属性。
例如,它可能如下所示:

const style = document.createElement("style");
document.head.appendChild(style);

const color = [255, 255, 255];
const incrementor = [-1, -1, -1];
style.textContent = `
    .class {
        color: rgb(${color.join(",")});
    }
`;

const cssRule = style.sheet.cssRules[0]; // instanceof CSSStyleRule

requestAnimationFrame(function changeColor () {

    cssRule.style.backgroundColor = `rgb(${color.join(",")})`;

    const index = Math.floor(Math.random() * 3);
    color[index] += incrementor[index];
    if (color[index] === 0) incrementor[index] = 1;
    else if (color[index] === 255) incrementor[index] = -1;

    requestAnimationFrame(changeColor);
});

相关问题