简体   繁体   English

将样式标签设置为div时出现问题

[英]Problems setting style tag to a div

I am creating something with JS and I cannot seem to add the style tag to a div that I created via javascript (I am not making a class for css for a reason do not suggest it) here is my code 我正在用JS创建某些东西,但似乎无法将样式标签添加到通过javascript创建的div中(由于某种原因我没有为CSS创建类,所以不建议这样做),这是我的代码

function createForm()
{
    var container = document.getElementsByClassName("container-fluid");
    var formElement = document.createElement("form");
    var inputName = document.createElement("input");
    var inputEvent = document.createElement("input");
    var inputTime = document.createElement("input");
    var sendWithTimer = document.createElement("input");
    var sendWithoutTimer = document.createElement("input");
    var divContainer = document.createElement("div");
    formElement.className = "form";
    divContainer.className = "enforce-styles";
    inputName.className = "name";
    inputEvent.className = "event";
    inputTime.className = "time";
    sendWithTimer.className = "sendWithTimer";
    sendWithoutTimer.className = "sendWithoutTimer";
    inputName.setAttribute('type', "text");
    inputEvent.setAttribute('type', "text");
    inputTime.setAttribute('type', "text");
    inputName.setAttribute('placeholder', "Name");
    inputEvent.setAttribute('placeholder', "Event");
    inputTime.setAttribute('placeholder', "Time");
    sendWithTimer.setAttribute('type', "button");
    sendWithoutTimer.setAttribute('type', "button");
    sendWithTimer.setAttribute('value', "Timer");
    sendWithoutTimer.setAttribute('value', "No timer");
    formElement.appendChild(inputName);
    formElement.appendChild(inputEvent);
    formElement.appendChild(inputTime);
    divContainer.appendChild(sendWithTimer);
    divContainer.appendChild(sendWithoutTimer);
    for (var formElementStyles = 0; formElementStyles < formElement.length; formElementStyles++)
    {
        formElement[formElementStyles].style.display = "-webkit-flex";
        formElement[formElementStyles].style.display = "flex";
        formElement[formElementStyles].style.webkitFlexDirection = "column";
        formElement[formElementStyles].style.flexDirection = "column";
        formElement[formElementStyles].style.position = "relative";
        formElement[formElementStyles].style.top = 0;
        formElement[formElementStyles].style.left = 40 + "%";
        formElement[formElementStyles].style.padding = 0.6 + "em";
        formElement[formElementStyles].style.margin = 1 + "em";
    }
    for (var divContainerStyles = 0; divContainerStyles < divContainer.length; divContainerStyles++)
    {
        divContainer[divContainerStyles].style.display = "-webkit-flex";
        divContainer[divContainerStyles].style.display = "flex";
        divContainer[divContainerStyles].style.webkitFlexDirection = "column";
        divContainer[divContainerStyles].style.flexDirection = "column";
        divContainer[divContainerStyles].style.position = "relative";
        divContainer[divContainerStyles].style.top = 0;
        divContainer[divContainerStyles].style.left = 40 + "%";
        divContainer[divContainerStyles].style.padding = 0.6 + "em";
        divContainer[divContainerStyles].style.margin = 1 + "em";
        divContainer[divContainerStyles].style.height = 10 + "em";
    }
    container[0].appendChild(formElement);
    container[0].appendChild(divContainer);
}

I cannot seem to get the second for loop to place the style tags. 我似乎无法获得第二个for循环来放置样式标签。 The div just appears with nothing but a class name which was set above. div只会显示上面设置的类名而已。 But I cannot get the styles on there. 但是我不能在那里找到样式。 The styles are for two buttons inside a form I am inserting into a clients website. 样式是我要插入客户网站的表单中两个按钮的样式。 How can I get this to work? 我该如何工作? What am I doing wrong? 我究竟做错了什么?

Your code does not apply the style to the input fields, because divContainer.length does not exist, neither does divContainer[divContainerStyles] . 您的代码不会将样式应用于输入字段,因为divContainer.length不存在, divContainer[divContainerStyles]也不存在。 divContainer is an div Object and has no length attribute (as opposed to the form element, which does have a length attribute) so that's why it never gets into the second loop. divContainer是一个div对象,没有长度属性(与具有长度属性的form元素相反),因此这就是它永远不会进入第二个循环的原因。

Your code produces the following error: https://jsfiddle.net/tdbju0ud/ 您的代码产生以下错误: https : //jsfiddle.net/tdbju0ud/

Instead, you should check for the length of divContainer.childNodes and apply the styles to those. 相反,您应该检查divContainer.childNodes的长度,然后将样式应用于这些样式。

for (var divContainerStyles = 0; divContainerStyles < divContainer.childNodes.length; divContainerStyles++)
{
    divContainer.childNodes[divContainerStyles].style.display = "-webkit-flex";
    ...
}

A working test in: https://jsfiddle.net/Lvq6hvxd/ 在以下环境中进行工作测试: https//jsfiddle.net/Lvq6hvxd/

这将divContainer[divContainerStyles].setAttribute('style', <your styles>)

Use childNodes to get the child elements of the div container. 使用childNodes获取div容器的子元素。 like 喜欢

var nodes = divContainer.childNodes

Find out the length of this nodes array object to find out the child elements count of the div. 找出此节点数组对象的长度,以找出div的子元素计数。

Here is the corrected code : 这是更正的代码:

var container = document.getElementsByClassName("container-fluid");
    var formElement = document.createElement("form");
    var inputName = document.createElement("input");
    var inputEvent = document.createElement("input");
    var inputTime = document.createElement("input");
    var sendWithTimer = document.createElement("input");
    var sendWithoutTimer = document.createElement("input");
    var divContainer = document.createElement("div");
    formElement.className = "form";
    divContainer.className = "enforce-styles";
    inputName.className = "name";
    inputEvent.className = "event";
    inputTime.className = "time";
    sendWithTimer.className = "sendWithTimer";
    sendWithoutTimer.className = "sendWithoutTimer";
    inputName.setAttribute('type', "text");
    inputEvent.setAttribute('type', "text");
    inputTime.setAttribute('type', "text");
    inputName.setAttribute('placeholder', "Name");
    inputEvent.setAttribute('placeholder', "Event");
    inputTime.setAttribute('placeholder', "Time");
    sendWithTimer.setAttribute('type', "button");
    sendWithoutTimer.setAttribute('type', "button");
    sendWithTimer.setAttribute('value', "Timer");
    sendWithoutTimer.setAttribute('value', "No timer");
    formElement.appendChild(inputName);
    formElement.appendChild(inputEvent);
    formElement.appendChild(inputTime);
    divContainer.appendChild(sendWithTimer);
    divContainer.appendChild(sendWithoutTimer);
    for (var formElementStyles = 0; formElementStyles < formElement.length; formElementStyles++) {
        formElement[formElementStyles].style.display = "-webkit-flex";
        formElement[formElementStyles].style.display = "flex";
        formElement[formElementStyles].style.webkitFlexDirection = "column";
        formElement[formElementStyles].style.flexDirection = "column";
        formElement[formElementStyles].style.position = "relative";
        formElement[formElementStyles].style.top = 0;
        formElement[formElementStyles].style.left = 40 + "%";
        formElement[formElementStyles].style.padding = 0.6 + "em";
        formElement[formElementStyles].style.margin = 1 + "em";
    }
var divChildNodes = divContainer.childNodes; 
    for (var divContainerStyles = 0; divContainerStyles < divChildNodes.length; divContainerStyles++) {
        divChildNodes[divContainerStyles].style.display = "-webkit-flex";
        divChildNodes[divContainerStyles].style.display = "flex";
        divChildNodes[divContainerStyles].style.webkitFlexDirection = "column";
        divChildNodes[divContainerStyles].style.flexDirection = "column";
        divChildNodes[divContainerStyles].style.position = "relative";
        divChildNodes[divContainerStyles].style.top = 0;
        divChildNodes[divContainerStyles].style.left = 40 + "%";
        divChildNodes[divContainerStyles].style.padding = 0.6 + "em";
        divChildNodes[divContainerStyles].style.margin = 1 + "em";
        divChildNodes[divContainerStyles].style.height = 10 + "em";
    }
    container[0].appendChild(formElement);
    container[0].appendChild(divContainer);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM