- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我当前的项目中,当我尝试更改 html 元素的属性时,我遇到了一些奇怪的行为(从我的 Angular 来看)。
在我的代码中,a 定义了一个 javascript 对象 - 该对象有一个“this.element”属性,其中包含一个 html 元素,该属性通过构造函数传递。在这个对象中,我有几个函数。在这些函数之一中,我尝试通过执行以下操作来更改该对象的某些样式:
this.element.style.visibility = "hidden";
尝试执行此操作时,我没有收到任何错误,但样式保持不变。一段时间后,我发现了一个解决方法:
document.getElementById(this.element.id).style.visibility = "hidden";
基本上是一样的。这有效,我可以设置元素的样式。尽管此解决方法有效,但它要求我的元素具有 ID。虽然这不是问题,但如果我能解决这个问题,我的编码可能会变得容易得多。
我正在使用 Chrome 进行测试,项目准备好部署后我们将使用 Chrome 浏览器,因此使用不同的浏览器对我来说并不是真正的选择。
如果有人能帮助我理解/解决这种情况,我将不胜感激:)- 提前致谢
编辑:更多代码。我整理的这个例子说明了我正在做的事情。但是,当我单独运行它时,我无法实现我所描述的行为。
我不知道这是否重要,但在我的例子中,表示“changeAllStyles”的函数在构造函数之后调用时工作正常。该函数的所有子序列调用都是由于来自 websockets 的“onMessage”事件的调用。
var myObjArray = [];
function init(){
//Using jQuery to select all elements containing the "data-whatever" attribute:
var elements = $('*[data-whatever]');
//Create a myObj object for each of theese elements:
for (var i = 0; i < elements.length; i++) {
var params = elements[i].getAttribute("data-whatever");
myObjArray.push(new myObj(elements[i], params));
myObjArray[i].changeStyle();
}
}
function myObj(element, params){
this.element = element;
this.params = params;
this.changeStyle = function(){
this.element.style.visibility = "hidden";
};
}
function changeAllStyles(){
for (var i = 0; i < myObjArray.length; i++) {
myObjArray[i].changeStyle();
}
}
最佳答案
听起来好像在代码中的其他地方,您在初始化 this.element
之后删除了 DOM 元素,然后重新创建它,如下所示:
HTML:
<div id='bar'><span id='foo'>This is foo</span> inside 'bar'</div>
JavaScript:
var foo = document.getElementById('foo');
var bar = document.getElementById('bar');
bar.innerHTML = "<span id='foo'>This is a new foo</span> inside 'bar'";
foo.style.visibility = "hidden"; // <== No effect, wrong element
如您所见,我们获取“foo”元素,获取“bar”元素,然后用全新的内容替换“bar”的内容。这意味着“bar”内的所有元素都将被删除,然后创建新元素。恰好其中一个新元素的 ID 为“foo”,所以
document.getElementById(foo.id).style.visibility = "hidden";
...即使 foo.style.visibility = "hidden";
不起作用也能起作用,因为它是一个完全不同的元素,并且恰好具有相同的 ID。
关于JavaScript - 在 JS 对象内操作 HTMLElements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4898620/
我正在尝试使用 VS 2013 中的 WebBrowser 控件在网页上输入文本。我的应用程序是用 C# 编写的。网页的 Html 不使用标准 ID,而是使用称为 data-gel-id 的内容。我相
假设我有以下 HTML 代码: My first menu My second menu My title My t
在很多情况下,我已经能够以两种方式为所有 HTMLElements 注册方法。 所以我很好奇,有什么不同吗? 我应该更喜欢一种方法而不是另一种方法吗? 什么是正确的方法? 最佳答案 使用原型(prot
我创建了一个自定义事件。 var event = new Event('hello');,向节点添加监听器 div1.addEventListener('hello', /*cb1*/); div2.
[[WARNING]]:看起来像问题 TypeScript: add type property to HtmlElement但我需要向元素对象添加一个函数,而不是向节点添加属性。 我尝试将 Java
我通过 babel(es2015 预设)运行 my-widget.js 来生成 my-widget-es5.js。这会导致 Polymer 出现错误。 Class constructor Polyme
[[WARNING]]:看起来像问题 TypeScript: add type property to HtmlElement但我需要向元素对象添加一个函数,而不是向节点添加属性。 我尝试将 Java
我试图用以下设计模式写一些东西: void main() { document.registerElement('abs-test', Test); TestExtend test =
我正在尝试为 textarea html 元素引发 keydown 和 key up 事件,我可以将内部文本设置为我想要的文本,但网站似乎不承认文本在那里,除非我可以提出这些事件。我怎样才能做到这一点
使用 jQuery 可以做这样的事情:$("div")[5].animate() 在我看来,开发人员使用 prototype 扩展了 HTMLElement。 我现在的问题是:他们是怎么做到的?例如,
似乎HTMLElements默认情况下在 5 秒内等待元素。有什么方法可以更改此默认超时持续时间吗? 最佳答案 在当前版本中这是不可能的。但是我们有一个开放的拉取请求(https://github.c
https://jsfiddle.net/6vqbLm5c/29/ HTML: paragraph CSS: p { margin:0; } div { padding: 10px
如果该按钮不存在,则测试将挂起超过 5 秒。 DefaultElementLocator 中的 findElement() 方法被调用约 63 次! block 嵌套越深,等待时间越长。 是否可以在
我想检查库如何处理我传递给它的视频元素,所以我天真地这样做了: cosnt videoElement = new Proxy(document.querySelector('video'), {
我有一个 Element,但我不知道如何从中获取 HTMLElement。 例如: A link Another link 然后我像这样得到它们: var nodes: NodeListOf = do
我想从 document 获取元素高度,我正在尝试使用 const header = document.getElementsByClassName(myClass) 获取它。但是在将Element
我在将我的一个 JavaScript 行转换为 TypeScript 时遇到了一些问题。 此行用于在 ID 为 containerId 的容器上创建类型为 widgetName 的小部件。 widge
我正在尝试在 TypeScript 中实例化新的 HTMLDivElement var elem = new HTMLDivElement(); 但是浏览器抛出 Uncaught TypeError:
我想通过 javasacript 从字符串创建 HTMLElement,就像这样 element = createHTMLElement('title') element.addEventListen
如何获取插槽中 child 的 Dom 元素。试图在life hook onMounted()中获取一个对象的el vnode属性为null 我的组件: {{text}} impo
我是一名优秀的程序员,十分优秀!