为了账号安全,请及时绑定邮箱和手机立即绑定

用JS生成的标签和原生标签 相同的CSS选择结果不同?

用JS生成的标签和原生标签 相同的CSS选择结果不同?

幕布斯6054654 2019-03-14 18:15:14
<!doctype html><html><head><meta charset="utf-8"><title></title><style>#ul{ width:50%;}li{ background:#f5f5f5; border-bottom:1px solid #ddd; padding:5px 0; }#ul li:nth-child(n+5){ background:#F90}</style></head><body><ul id='ul'>    <li>1</li>    <li>2</li>    <li>3</li>    <li>4</li>    <li>5</li>    <li>6</li>    <li>7</li>    <li>8</li>    <li>9</li>    <li>10</li>    <li>11</li>    <li>12</li></ul></body></html>以上代码是从第四个子元素开始选择<!doctype html><html><head><meta charset="utf-8"><title></title><style>#ul{ width:50%;}li{ background:#f5f5f5; border-bottom:1px solid #ddd; padding:5px 0; }#ul li:nth-child(n+5){ background:#F90}</style></head><body><ul id='ul'><script>for(var i=1;i<=12;i++){    document.write('<li>' + i + '</li>')}</script></ul></body></html>以上代码是从第三个子元素开始选择请问这是为什么???
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

有两种解决方法

第一:如果HTML和JS不变的话,可以把CSS选择器nth-child换成nth-of-type!


<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>选择某个区间的元素-CSS3</title>

<style>

#ul{ width:50%;}

li{ background:#f5f5f5; border-bottom:1px solid #ddd; padding:5px 0; }

#ul li:nth-of-type(n+5){ background:#F90}

/*ul li:nth-child(-n+2){ background:#ccc}*/

</style>

</head>

<body>

<ul id='ul'>

<script>

for(var i=1;i<=12;i++){

    document.write('<li>' + i + '</li>')

}

</script>

<!--

    <li>1</li>

    <li>2</li>

    <li>3</li>

    <li>4</li>

    <li>5</li>

    <li>6</li>

    <li>7</li>

    <li>8</li>

    <li>9</li>

    <li>10</li>

    <li>11</li>

    <li>12</li>

-->        

</ul>

</body>

</html>

第二种解决方法,CSS不变,就是照DriftKing说的把JS写在父元素外面,add进去:


<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>选择某个区间的元素-CSS3</title>

<style>

#ul{ width:50%;}

li{ background:#f5f5f5; border-bottom:1px solid #ddd; padding:5px 0; }

#ul li:nth-child(n+5){ background:#F90}

/*ul li:nth-child(-n+2){ background:#ccc}*/

</style>

</head>

<body>

<ul id='ul'>

<!--

    <li>1</li>

    <li>2</li>

    <li>3</li>

    <li>4</li>

    <li>5</li>

    <li>6</li>

    <li>7</li>

    <li>8</li>

    <li>9</li>

    <li>10</li>

    <li>11</li>

    <li>12</li>

-->        

</ul>

<script>

var u = document.getElementById("ul"); 

for(var i=1;i<=12;i++){

    var li = document.createElement("li"); 

    li.innerText = i;

    u.appendChild(li); 

}

</script>

</body>

</html>


查看完整回答
反对 回复 2019-03-28
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

用js生成的标签,查看控制台可以看到这样的结构:
https://img1.sycdn.imooc.com//5c9c6a7a0001d6ba08000332.jpg

可以看到ul下面有你的<script></script>

同样,原生的标签中如果加入一个空的<script></script>空标签的话,两种方式的结果就一样了,
https://img1.sycdn.imooc.com//5c9c6a7c0001d3b906920572.jpg

感觉是把scritp标签页当成了ul的一个child.


查看完整回答
反对 回复 2019-03-28
?
富国沪深

TA贡献1790条经验 获得超9个赞

你这个js的写法就有问题呀,页面加载完,直接append进去呀,写在html里,选择器肯定把他当成了一个子标签


查看完整回答
反对 回复 2019-03-28
  • 3 回答
  • 0 关注
  • 542 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信