在创建网页时,我总是使用功能
var someVariable = document.getElementById('myID');
Run Code Online (Sandbox Code Playgroud)
获取对元素对象的引用.最近有人向我建议这不是必要的,因为已经存在这样的变量.它的名字等于id.我测试过它似乎有效.
<div id="myID">some text</div>
<a href="someplace" onclick="alert(myID.innerHTML)">click here</a>
Run Code Online (Sandbox Code Playgroud)
此代码有效,它会按预期警告"某些文本".firefox错误控制台中只有一个警告:
全局范围内由ID/NAME引用的元素.使用WC3标准document.getElementById()代替....
我现在大部分时间都在使用jQuery,但我需要向工作中的老板证明一点,否则我将不得不给他买一盒巧克力:-).
任何想法为什么上层代码不起作用或为什么使用它是一个非常错误的想法(在Firefox中警告是不够的)???
谢谢你的回答
通过window.someThing访问元素时,"someThing"应该是html元素的名称.但我现在看到的是,我可以通过id以相同的方式访问元素,而无需document.getElementById.什么时候改变了?看起来它适用于Chrome,IE,Firefox 13,但不适用于Firefox 12.
例如:
<div id="MyDiv">Content</div>
<script>
MyDiv.innerHTML = "New Content";
</script>
Run Code Online (Sandbox Code Playgroud)
为什么上面的例子有效?我为什么不这样做:
var MyDiv = document.getElementById('MyDiv');
Run Code Online (Sandbox Code Playgroud)
它是新的东西,还是一直有可能,我只是不知道它?
我注意到以下几点:
<div id='myDiv'>...</div>
<script>
myDiv.style.color = 'red'; // I can access the object.
<script>
Run Code Online (Sandbox Code Playgroud)
在实现这一点之前,我总是使用以下内容:
var x = document.getElementById('myDiv');
x.style.color = 'red';
Run Code Online (Sandbox Code Playgroud)
我很迷惑.第二种方法有什么意义?第一种方法总是有效吗?
import utilityRemove from 'lodash/array/remove';
import utilityAssign from 'lodash/object/assign';
import utilityRandom from 'lodash/number/random';
import utilityFind from 'lodash/collection/find';
import utilityWhere from 'lodash/collection/where';
let util;
util = {};
util.remove = utilityRemove;
util.assign = utilityAssign;
util.random = utilityRandom;
util.find = utilityFind;
util.where = utilityWhere;
Run Code Online (Sandbox Code Playgroud)
使用ES6模块系统有更好的方法吗?
我注意到在几个浏览器中,dom元素只能通过它们的id访问:
HTML
<div id="chocolat"></div>
Run Code Online (Sandbox Code Playgroud)
JS
alert(chocolat.id); //alerts "chocolat
chocolat; //points to the node
window.chocolat; //idem
chocolat === document.getElementById('chocolat'); // true
Run Code Online (Sandbox Code Playgroud)
(在这里测试:http://jsfiddle.net/GUUPT/)这适用于Chrome上的某些版本的IE,但它不适用于Firefox(5).
我好奇这是从哪里来的?这是标准吗?
我想在更新选项卡时执行内容脚本功能.问题是,有时候标签更新是ajax(没有页面重新加载),同时仍然会更改页面的URL.因此,注入的旧内容脚本仍然存在于页面上.结果是在同一页面上注入并运行了多个内容脚本实例.
所以,我正在寻找一种注入内容脚本的机制,只有在之前没有注入相同的内容脚本时.有任何想法吗?
如果我写这样的HTML:
<div id="foo">Foo<div>
Run Code Online (Sandbox Code Playgroud)
window.foo返回一个dom元素并window.document.getElementById("foo") === window.foo返回true.
这是为什么?为什么每个人都使用getElementById?
并在旁注:为什么window.foo在IE7/8中禁止超越?如果我设置会发生什么window.foo = "bar"?
假设我有一个div看起来像:
<div id="testDiv">some stuff in here</div>
Run Code Online (Sandbox Code Playgroud)
我有一个定义对象文字的脚本:
var testObject =
{
testDiv: $("#testDiv"),
testDivProperty: this.testDiv
};
Run Code Online (Sandbox Code Playgroud)
为什么我访问时testObject.testDiv获得对jQuery对象的引用,即
[<div id=?"testDiv">?…?</div>?]
Run Code Online (Sandbox Code Playgroud)
但是当我访问时,testObject.testDivProperty我获得了对实际元素的引用,即
<div id=?"testDiv">?…?</div>?
Run Code Online (Sandbox Code Playgroud)
因此我无法执行jQuery操作testObject.testDivProperty?
<form>
<label for="male">Male</label>
<input type="radio" id="male"/>
<label for="female">Female</label>
<input type="radio" id="female"/>
</form>
Run Code Online (Sandbox Code Playgroud)
正如大多数JS开发人员所知,在这种情况下,使用ID会泄漏全局变量window.male并被window.female创建.
如何在不创建全局变量的情况下使用表单标签?
通常我通过 id 选择元素document.getElementById('idName')。但显然您也可以仅通过名称“idName”来选择它们。直到最近我才意识到这一点。我想知道通过 idName 选择元素是否是一种“不好的做法”?我已经使用了搜索引擎,但没有找到任何关于 的信息select by id name。现在这是我的问题。
console.log(idName)Run Code Online (Sandbox Code Playgroud)
<div id="idName">Hello World</div>Run Code Online (Sandbox Code Playgroud)
javascript ×10
html ×3
dom ×1
ecmascript-6 ×1
forms ×1
globals ×1
html5 ×1
include ×1
jquery ×1