Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以动态修改div(具有id)中的子元素(没有id)的样式?_Javascript_Html_Css_Dom_Svg - Fatal编程技术网

Javascript 是否可以动态修改div(具有id)中的子元素(没有id)的样式?

Javascript 是否可以动态修改div(具有id)中的子元素(没有id)的样式?,javascript,html,css,dom,svg,Javascript,Html,Css,Dom,Svg,使用以下代码: <div id="container"> <svg [attributes etc.]> ... </svg> </div> 但我得到了错误“未定义的不是对象” SVG是使用服务器端包含加载的,我无法以任何方式修改它,因此我需要找到一种从外部操作它的方法 我希望避免使用jQuery。getElementsByTagName返回类似数组的集合对象。因此,您需要对集合进行迭代,例如: myObj = document.getE

使用以下代码:

<div id="container">
    <svg [attributes etc.]> ... </svg>
</div>
但我得到了错误“未定义的不是对象”

SVG是使用服务器端包含加载的,我无法以任何方式修改它,因此我需要找到一种从外部操作它的方法


我希望避免使用jQuery。

getElementsByTagName返回类似数组的集合对象。因此,您需要对集合进行迭代,例如:

myObj = document.getElementById('container').getElementsByTagName('svg');
myObj[0].style.width = "400px";//myObj[0] refers to first found svg element

getElementsByTagName返回类似数组的集合对象。因此,您需要对集合进行迭代,例如:

myObj = document.getElementById('container').getElementsByTagName('svg');
myObj[0].style.width = "400px";//myObj[0] refers to first found svg element

如果您有权访问css,那么您可以单独使用css来实现这一点吗

#container {
    svg {
        width: 400px;
    }
}

如果您有权访问css,那么您可以单独使用css来实现这一点吗

#container {
    svg {
        width: 400px;
    }
}

出现该错误的原因是
myObj
getElementsByTagName()
的结果,它是元素的节点列表,因为它可能返回多个元素,并且没有在节点列表上定义
style
。这不是一个特别有用的错误,因为它没有描述实际的问题

无论如何,只需索引该集合即可获得可使用的元素:

myObj = document.getElementById('container').getElementsByTagName('svg');
myObj[0].style.width = "400px";
或者,如果您确定只有一个
#container>svg
,请使用
querySelector()

myObj = document.querySelector('#container > svg');
myObj.style.width = "400px";

出现该错误的原因是
myObj
getElementsByTagName()
的结果,它是元素的节点列表,因为它可能返回多个元素,并且没有在节点列表上定义
style
。这不是一个特别有用的错误,因为它没有描述实际的问题

无论如何,只需索引该集合即可获得可使用的元素:

myObj = document.getElementById('container').getElementsByTagName('svg');
myObj[0].style.width = "400px";
或者,如果您确定只有一个
#container>svg
,请使用
querySelector()

myObj = document.querySelector('#container > svg');
myObj.style.width = "400px";


这很有效,我会在一分钟内选择你的答案。你知道是否有更好的选择(即更直接的选择),比如“document.getElementById('container').child(0)?你可以使用
document.querySelector('#container>svg')。style.width='400px';
效果很好,我会在一分钟内选择你的答案。你知道有没有更好的选择吗(即更直接的)如“document.getElementById('container').child(0)?您可以使用
document.querySelector('#container>svg')).style.width='400px';
但这不是真正的动态。问题是我需要使用Javascript。值是在页面加载时生成的,我事先不知道。很抱歉,我完全错过了动态部分-不知道怎么做。要避免使用jQuery吗?可以设置JSFIDLE吗?但这不是真正的动态。问题是lem是我需要用Javascript来实现它。值是在页面加载时生成的,我事先不知道。很抱歉,我完全错过了动态部分-不知道怎么做。你想避免使用jQuery吗?你能设置一个JSFIDLE吗?我读到querySelector比getElementById慢得多,所以我试图避免它。@Andrew Swift:I建议在决定是否值得考虑之前运行一个基准测试来验证这一点。您打算多长时间选择一次此元素?我确信SVG需要比选择此元素更多的时间来渲染。我只选择一次,将其调整为窗口大小。确实没有太大损失,但页面已经太慢,无法浏览d所以我试图优化每一件小事。我读到querySelector比getElementById慢得多,所以我试图避免它。@Andrew Swift:我建议运行一个基准测试来验证这一点,然后再决定是否值得考虑。你多久选择一次这个元素?我确信SVG需要比选择了is元素。我只需选择它一次,就可以将其调整为窗口大小。确实,没有太大的损失,但是页面已经太慢,无法加载,所以我正在尝试优化每一个小东西。