Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.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
Jquery 当div中的文本块并没有特定的标记名时,如何更改它们的样式_Jquery_Html_Css - Fatal编程技术网

Jquery 当div中的文本块并没有特定的标记名时,如何更改它们的样式

Jquery 当div中的文本块并没有特定的标记名时,如何更改它们的样式,jquery,html,css,Jquery,Html,Css,我有一个列表,其中包含多个div,分别表示单元组和类的截面和跨距。在每个div和span之前,我使用带有箭头的图像来展开列表和样式化的复选框输入 当整个文本字符串不能放在一行中时,我不希望文本环绕图像。 我需要它在第一行文本所在的同一点垂直对齐,但不与图像对齐 无法在文本前面使用span,因为我有一个很长的项目列表,并且我使用DOM和span切换列表。 文本不在标签标签中,因为我使用它来设置复选框的样式 这有什么办法吗?可能使用jquery DOM选择器并生成显示块?但我似乎无法正确定位,也无法

我有一个列表,其中包含多个div,分别表示单元组和类的截面和跨距。在每个div和span之前,我使用带有箭头的图像来展开列表和样式化的复选框输入 当整个文本字符串不能放在一行中时,我不希望文本环绕图像。 我需要它在第一行文本所在的同一点垂直对齐,但不与图像对齐

无法在文本前面使用span,因为我有一个很长的项目列表,并且我使用DOM和span切换列表。 文本不在标签标签中,因为我使用它来设置复选框的样式

这有什么办法吗?可能使用jquery DOM选择器并生成显示块?但我似乎无法正确定位,也无法真正应用正确的样式:

$document.readyfunction{ $'.sections标签'.nextSibling.css{ “显示”:“块”, “背景色”:“红色”, “左边距”:“5px” }; }; .部分{ 显示:块; 宽度:100%; 边缘顶部:5px; 右边距:0; } .单位{ 显示:块; 边缘顶部:5px; 左边距:15px; } .团体{ 显示:块; 边缘顶部:5px; 左边距:15px; } .课程{ 显示:块; 边缘顶部:5px; 左边距:15px; } 第A节衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分A衣服部分 01 服装 01.1夏装 AA0001 AA0002 01.2冬装 AAAA0003AAA0003AAAA0003AAA0003AAAA0003AAA0003AAAA0003 AA0004 01.3舞会礼服 02裙 01.1夏季 01.1冬季 01.1休闲裙
一般来说,处理文本节点非常困难,因为据我统计,有5个文本节点是.sections的直接子节点。用于更好地格式化标记或错位空间的任何换行符都是最终出现在标记中的文本节点的示例。我能想到的针对这些文本节点的唯一方法是循环遍历元素的.childNodes节点列表集合中的每个子节点,并将其作为节点类型为3的文本节点进行测试。即使在这之后,也不能直接设置文本节点的样式。必须设置文本节点父节点的样式,才能使其生效。您可以将该文本节点包装到父节点中,我建议您这样做。下面是一个代码片段,它正好做到了这一点:

$(document).ready(function () {
    $('.sections, .groups, .units, .classes').each(function(){
        var children = this.childNodes;
        for(var i = 0, l = children.length; i < l; i++) {
            if(children[i].nodeType === Node.TEXT_NODE && children[i].nodeValue.trim() !== '') {
                var inner = document.createElement('div');

                // preferable to use a class and CSS
                inner.className = 'highlighted';

                // but you can use inline styles too
                inner.style.backgroundColor = 'red';
                inner.style.marginLeft = '5px';

                // append it to our div and then insert it before it's original position
                inner.appendChild(children[i]);
                this.insertBefore(inner, children[i]);
            }
        }
    });
});
需要注意的重要事项是,它总是检查修剪后的文本节点是否为空。这样可以避免捕获仅由新线、空间等组成的节点。然后,它将文本节点包装在一个div中,您可以将类添加到该div中,也可以直接设置样式。不建议使用后者。还要注意,我更改了选择器。理论上,您仍然可以选择标签并在其父对象上循环,但当我尝试时,它不起作用。现在,这个代码段使用一个选择器,它只指定要获取哪些节点的子节点,而不是同级节点。最后,使用您提供的标记,其中一个文本节点位于标签内部,不会更改。这不是javascript中的错误。它不选择作为标签子级的文本节点。将其更改为“.sections、.groups、.units、.classes、label”将改变此设置


下面是演示:

我确实认为我需要在标签之后以文本节点为目标,并使float:left或其他什么?您可以将float:left设置为并输入[type=checkbox],不是吗。nextSibling.css应该是this.next.css?With.next.css它以下一个单元为目标,而不是文本节点。您编写的脚本似乎正在工作,并针对我所需要的内容,我现在只需要弄清楚css,使文本节点的第一行与输入和img保持在同一行,如果文本不适合,则第二行与现在保持一致,但不在图像和输入下面。感谢you@Christine为此,我只需将图像和复选框向左浮动,并将overflow:auto添加到新创建的div中。。。不记得如何包装单词:打断单词;:P