为什么jQuery选择器无法工作但getElementById在这种情况下有效?

Als*_*ton 5 javascript jquery dom

这是HTML:

<html>
  <head>
    <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    <script type="text/javascript" charset="utf-8" src="jquery-1.7.2.js"></script>
    <script type="text/javascript" src="access.js"></script>
  </head>
  <body>
    <button id="trigger"></button>
    <img id= "testElement" style= "position: absolute; border-color: white; top:340px; left:615px;" width="34px" height= "34px" />
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

access.js文件是:

$(document).ready( function(){
  $('#trigger').click(function(){
    $('#testElement').src="success.png";
    //THIS WON'T WORK.
    document.getElementById('testElement').src= "success.png";
    //BUT THIS WORKS.
  });
});
Run Code Online (Sandbox Code Playgroud)

我知道如果我使用$,则返回对象是一个jQuery对象.它与getElementById不同.但为什么jQuery选择器不能在这里工作?

我需要jQuery对象来做更多的操作,比如"append/style"......

谢谢.

更新 太多正确答案几乎同时出现...请给出更多解释让我决定谁应该给予信用,谢谢!

很抱歉我对你的正确答案了解不多......我只想了解更多细节.

所有属性节点(src/width/height ...)都不是jQuery对象的属性吗?那么jQuery选择器只选择像img/p/li/div节点那样的DOM元素节点吗?(<>导致一些错误.)

请看一下更新的信息......谢谢!

elc*_*nrs 9

jQuery元素是一个包含在类似数组的 jQuery对象中的DOM元素,因此您可以访问所有jQuery方法,但这意味着您"失去"对原始DOM方法和属性的访问权限.您可以使用jQuery方法或抓取原始DOM元素以使用vanilla属性.

$('#testElement').attr('src', 'success.png');
$('#testElement')[0].src = 'success.png';
                --^-- get DOM element
Run Code Online (Sandbox Code Playgroud)


arm*_*oon 8

因为您需要.attr()在jQuery对象上使用jQuery方法:

$('#testElement').attr("src", "success.png");
Run Code Online (Sandbox Code Playgroud)

  • @Stallman当然.`src`是普通旧DOM元素的属性.当您使用jQuery时,您正在与jQuery包装器交互而不是实际的DOM元素.jQuery本身将为您设置DOM元素的`src`属性. (2认同)