【问题标题】:Border property not working after creating element dynamically动态创建元素后边框属性不起作用
【发布时间】:2018-07-19 15:16:14
【问题描述】:

我创建了一个 div 元素。在其中包装了一个文本框,然后我更新了它的边框属性,但它没有显示出来。这里有什么问题??

var div =$('<div id="myDiv"></div>').css("border", "1px solid black");
$("#text1").wrap(div);
div.css("border", "1px solid red");
alert(div.css("border")); // it is showing 1px solid red

【问题讨论】:

  • 现有答案为您提供了一种解决方法,但并未真正理解问题所在。真正的问题是wrap 从 DOM 中删除了它包装的内容,创建了一个新副本并删除了包装的节点,这就是为什么再次查询可以解决您的问题

标签: jquery css


【解决方案1】:

您的“div”只是一个变量,而不是一个元素。 改用 id:

$("#myDiv").css("border", "1px solid red");

这里有解释和存储元素的正确方法:

// here you create a object that has no connection to the dom
var div =$('<div id="myDiv"></div>').css("border", "1px solid black");

// here you add a object to the dom that has the same values as your object - but it's a seperate entity
$("#text1").wrap(div);

// here you only update your first object - it will never reflect on it's twin in the dom - 
// so remove this line:
// div.css("border", "1px solid red");

// so instead, save the real element to your variable
div = $("#myDiv");

// now you can work with it and it will update in the dom!
div.css("border", "1px solid red");

// you also need to know that since this is now a real div in your dom, you need to explicitly state which border you want:
// https://stackoverflow.com/questions/3787502/how-to-get-border-width-in-jquery-javascript
alert(div.css("border-left-color")); 

var div =$('<div id="myDiv"></div>').css("border", "1px solid black");
$("#text1").wrap(div);
div = $("#myDiv");
div.css("border", "1px solid red");
alert(div.css("border-left-color")); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="text1">Text1</div>

【讨论】:

  • 我读到过,每当您想多次使用 jquery 对象时,最好创建一个变量并在整个代码中使用它。那我该怎么做呢??
  • 是的,但是现在你没有存储一个对象,你有一个字符串,你创建一个对象,然后你继续使用字符串,所以对象永远不会更新。我会给你一个例子来解决这个问题。
  • @abhi_awake 我添加了一个示例,如何在创建后存储真实元素。
  • 好的,知道了。另外,当我像 alert($('&lt;div id="myDiv"&gt;&lt;/div&gt;').css("border", "1px solid black")); 这样在这个 div 上发出警报时,它会向我展示一个对象。那么它是String对象呢??
  • 是的,它是你的字符串中的一个对象,但不是 dom 中的一个对象。它只是理论上存在于您的 javascript 中的一个对象,但与页面没有可见的连接。当您包装#text1 div 时,您会在 dom 中创建一个副本,但随后您需要使用该副本,而起初您仍在使用您的第一个对象。您可以查看此问题以获取有关如何查看您的对象是否为 dom 对象的信息:stackoverflow.com/questions/384286/…
猜你喜欢
  • 2017-07-21
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多