“whatYouTyped.parentNode;”有人可以打破这一点来解释它的确切感谢吗?
function checkphone(whatYouTyped) {
var fieldset = whatYouTyped.parentNode;
var txt = whatYouTyped.value;
if ( /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/.test(txt)) {
fieldset.className = "welldone";
compphone=true;
} else {
fieldset.className = "";
compphone=false;
}
}
答案 0 :(得分:1)
假设您有以下内容:
<div><input type="text" onBlur="checkphone(this)"/></div>
然后whatYouTyped.parentNode
将返回对div
的父节点input
的引用。
答案 1 :(得分:0)
whatYouTyped
必须是对元素的引用。这个语句停止对whatYouTyped
节点的父元素(容器)的引用。我猜这个语句之前会有像{{{{1}这样的行。 1}}
您已编辑了您的问题。请参阅您正在将元素的引用传递给该函数。 您的语句将返回对此元素的父级的引用
答案 2 :(得分:0)
看起来该函数接受一个属于某种元素的参数。该函数首先找到元素的父元素,并将其分配给变量fieldset。
然后获取原始元素的值(whatyoutyped),并根据正则表达式进行检查。如果模式匹配,则更改父元素的类并将'compphone'设置为true。语法看起来有点奇怪。
没有任何上下文,很难说这是为了什么,但它似乎正在检查某种输入/文本元素与正则表达式 - 某种验证。
答案 3 :(得分:0)
如果不使用一些术语,很难用英语来描述它!
whatYouTyped
是一个已设置为指向DOM树中元素的变量。
whatYouTyped.parentNode
是此元素的父元素。
更详细地解释:
DOM树是网页的结构,由浏览器保存在内存中。 HTML代码中的每个标记都由此树结构中的元素表示。
Javascript能够直接访问此树的任何部分,通常使用getElelementById()
函数(尽管有很多其他路径可以获取元素)。
whatYouTyped
变量可能已设置为使用getElementById()
或类似内容指向DOM树中的给定元素。
DOM树结构的一部分是能够在树中的元素之间导航。 parentNode
是允许您执行此操作的方法之一;它返回当前树之上的树中的元素。
在这种情况下,您可能会看到如下所示的HTML代码:
<fieldset id='outerLayer'>
<input type='text' id='whatYouTyped' value='This is what you typed' />
<input type='text' id='somethingElse' value='This is something else' />
</fieldset>
你的代码可能做过这样的事情:
var whatYouTyped = document.getElementById('whatYouTyped');
至此,您提供的代码是有意义的,因为whatYouTyped
变量现在设置为DOM树中的元素。要求whatYouTyped.parentNode
将为您提供outerLayer元素。
查看您提供的代码,如果输入通过验证,它看起来好像正在更改包装输入字段的元素的类。这将允许它执行诸如更改背景颜色之类的操作,或者在字段旁边添加刻度图标,或者如果用户输入有效字符串,则执行此类操作。
希望有所帮助。
[编辑]
根据对问题的编辑,我已经改变了一点。基本答案仍然是相同的。
答案 4 :(得分:0)
根据你在SO的其他问题,你有
<fieldset>
<label for="Phone">Phone:</label>
<input type="text" id="Phone" onkeyup="checkphone(this);" />
<span class="hint">This Feld Must Be Numeric Values Only !</span>
</fieldset>
(this)将输入字段对象传递给函数,函数查看它的parentNode,它的上面是<fieldset>
,然后将类设置为空或者没有 - 我建议你改变< em> whatyoutyped 到 inputField ,例如它更有意义。
定义函数时,放在函数()中的单词将是传递给函数的变量的名称。所以
function foo(bar) {
alert(bar);
}
如果你像foo("Hello")
那样打电话,会提醒您
你的情况
function checkphone(whateverYouWantToCallThePhoneFieldObjectInTheFunction) {
do something with whateverYouWantToCallThePhoneFieldObjectInTheFunction
}
并且可以将其更改为更具可读性的内容:
function checkphone(inputField) {
do something with inputField
}
仍然使用
传递它<input onblur="checkphone(this)"
因为这是如何在自己的事件处理程序中传递对象