【问题标题】:Why getElementsByClassName is not working while getElementById works?为什么 getElementsByClassName 不工作而 getElementById 工作?
【发布时间】:2016-11-19 07:16:06
【问题描述】:

第一个代码不起作用

DN.onkeyup = DN.onkeypress = function(){
  var div = document.getElementById("DN").value
  document.document.getElementsByClassName("options-parameters-input").style.fontSize = div;
}
#one{
    height:100px;
    width:100px;
    background-color:#CCCCCC;
    border:none;
    margin:10px;
    float:left;
}
<div id="one">
  <div class="options-parameters-input">
    gfdgd
  </div>
</div>
<br /><br /><br /><br /><br /><br /><br />
<table width="750" border="1" cellspacing="3" style="float:left;">
  <tr>
    <td>Test</td>
    <td><textarea id="DN"></textarea></td>
  </tr>
</table>

http://jsfiddle.net/gxTuG/85/

这一个有效

DN.onkeyup = DN.onkeypress = function(){
  var div = document.getElementById("DN").value
  document.getElementById("one").style.fontSize = div;
}
#one{
    height:100px;
    width:100px;
    background-color:#CCCCCC;
    border:none;
    margin:10px;
    float:left;
}
<div id="one">gfdgd</div>
<br /><br /><br /><br /><br /><br /><br />
<table width="750" border="1" cellspacing="3" style="float:left;">
  <tr>
    <td>Test</td>
    <td><textarea id="DN"></textarea></td>
  </tr>
</table>

http://jsfiddle.net/gxTuG/86/

在第一个代码中,我尝试使用getElementsByClassName,但它不起作用...

错误:未捕获的类型错误:无法读取 undefined(...) 的属性“getElementsByClassName”

所以我的问题是当我想定位像 div 类这样的元素时如何开始工作?

我的目标是在选项页面面板中实现管理员用户可以从 textarea 更改/注入新的 css 规则或输入某些元素的能力。还有 div class social-container-icons 等元素。

这也是注入新 css 规则的好方法吗?

谢谢

【问题讨论】:

  • bcz id 仅开启且类为一或多于一。
  • 你做了document.document。同样getElementsByClassName 返回一个HTMLCollection,而不是一个 DOM 节点。
  • 其实不是数组。它是一个类似数组的对象。它不继承Array.prototype 上的任何函数。

标签: javascript jquery html css


【解决方案1】:
  1. 更好地使用addEventListener().First 声明DN.then 通过this.value调用DN的值。因为它的功能相同 在元素中。

  2. 然后像 document.getElementsByClassName("options-parameters-input")[0] 一样抓住ClassName 结束 与[0].Class 与多个元素匹配 .so 标识为 [0].匹配第一个

  3. fontSize 的 Dom 你应该用px 提及

var DN = document.getElementById("DN");
DN.addEventListener("keyup",both);

function both(){
document.getElementsByClassName("options-parameters-input")[0].style.fontSize = this.value+'px';
}
#one{
    height:100px;
    width:100px;
    background-color:#CCCCCC;
    border:none;
    margin:10px;
    float:left;
}
<div id="one">
<div class="options-parameters-input">
gfdgd
</div>
</div>
<br /><br /><br /><br /><br /><br /><br />
<table width="750" border="1" cellspacing="3" style="float:left;">
  <tr>
    <td>Test</td>
    <td><textarea id="DN"></textarea></td>
  </tr>
</table>

【讨论】:

  • 你能告诉我这也是为某些元素注入新的 CSS 规则的好方法吗?或者,还有更好的方法 ?谢谢
  • 更好的方法是使用 javascript addClass 为 jquery 添加类名。纯javascript
【解决方案2】:

getElementsByClassName 返回对象数组,即使您的 HTML 中只有一个对象。所以你不能使用getElementsByClassName("options-parameters-input")[0] 或任何可能的索引。

【讨论】:

  • 太棒了!它现在适用于 getElementsByClassName("options-parameters-input")[0]
  • 请问你能告诉我注入新的css规则的好方法吗?
  • @Bundyboy 是的,这样做是可以的,但是如果您要更改更多样式属性,我建议您添加一个新的 CSS 类 -> 这样可以节省很多命令。
  • 如果可以,请给我看一下代码示例。 tnx
  • @Bundyboy Here 是使用类而不是内联样式更好的示例。
【解决方案3】:

document.getElementsByClassName 始终返回属于此类的元素的可迭代。如果要操作某个对象,则需要提供该元素的索引。 方法称为getElement__s__ByClassName。请记住这一点。

例如: HTML:

<div class="my-class>1st div</div>
<div class="my-class>2st div</div>

JS:

let myDivs = document.getElementsByClassName("my-class");
myDivs[0].style.fontSize = div;

【讨论】:

  • 它是getElementById,而不是您建议的getElementsById。这甚至根本没有任何意义,因为 id 必须是每个文档的唯一 identifier(因此 id)。
  • 好吧,现在你让事情变得更糟了getElementsByIdClassName。检查您的编辑。
猜你喜欢
  • 2013-07-01
  • 2017-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多