我是相对较新的Jquery。以及整个JS。
我已经责成自己构建实际上是一个基本框架构建器的东西。
我有一小段Jquery,它计算容器中子div(列)的数量,然后根据存在的子项设置列的宽度。
HTML
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
jQuery
function builder(){
var contCount = $('div.container').children().length;
if (contCount == 1) {
$('div.container').children().css('width', '100%');
}
else if (contCount == 2) {
$('div.container').children().css('width', '50%');
}
else if (contCount == 3) {
$('div.container').children().css('width', '33.33%');
}
else if (contCount == 4) {
$('div.container').children().css('width', '25%');
}
}
$(document).ready(builder);
问题:
当我有一个容器时,上面的方法有效,但是如果我有多个容器,它就会中断。我知道为什么会破裂,但不知道如何解决。
问题:
在Jquery / JS中,有一种方法可以将该函数分别应用于多个容器类吗?
谢谢!
尼尔。
答案 0 :(得分:0)
function builder(){
$('div.container').each(function(){
var contCount = $(this).children().length;
if (contCount == 1) {
$(this).children().css('width', '100%');
}
else if (contCount == 2) {
$(this).children().css('width', '50%');
}
else if (contCount == 3) {
$(this).children().css('width', '33.33%');
}
else if (contCount == 4) {
$(this).children().css('width', '25%');
}
});
}
$(document).ready(builder);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
</div>
尝试使用可以实现的所有功能!
答案 1 :(得分:0)
jQuery
function builder(){
$('div.container').each(function(){
var $children = $(this).children();
var contCount = $children.length;
if (contCount == 1) {
$children.css('background-color', 'red');
}
else if (contCount == 2) {
$children.css('background-color', 'red');
}
else if (contCount == 3) {
$children.css('background-color', 'green');
}
else if (contCount == 4) {
$children.css('background-color', 'red');
}
})
}
$(document).ready(builder);
答案 2 :(得分:0)
第var contCount = $('div.container').children().length;
行计算所有 'div.container'
个选择器匹配元素的子代,您想隔离容器并询问每个容器他有多少个子代。 / p>
function builder(){
$('div.container').each(function() {
var $children = $(this).children();
var contCount = $children.length;
if (contCount == 1) {
$children.css('background-color', 'red');
}
else if (contCount == 2) {
$children.css('background-color', 'red');
}
else if (contCount == 3) {
$children.css('background-color', 'green');
}
else if (contCount == 4) {
$children.css('background-color', 'red');
}
});
}
答案 3 :(得分:0)
请尝试一下,我认为这应该可行
jQuery(function(){
jQuery.fn.equalWidth = function(){
jQuery(this).each(function() {
var findLenght = jQuery(this).find('.col').length,
width = 100/findLenght;
jQuery(this).find('.col').css({'width': width+'%'});
});
}
jQuery('.container').equalWidth();
})
答案 4 :(得分:0)
您可以尝试使用CSS / flexbox轻松实现目标 参见here。
例如:
CSS:
.container
{
display: flex;
}
.col
{
flex: 1 1 auto;
}
HTML:
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
实际上,使用js而不是CSS来操纵样式是一种弊端,导致代码质量差并且难以消除问题。
答案 5 :(得分:0)
让我们解释为什么您得不到预期的结果。深刻理解问题总是很重要的。它可以帮助您解决其他类似问题。
我喜欢使用您的代码参考。
您的HTML代码:
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
您的JS代码:
function builder(){
var contCount = $('div.container').children().length;
if (contCount == 1) {
$('div.container').children().css('width', '100%');
}
else if (contCount == 2) {
$('div.container').children().css('width', '50%');
}
else if (contCount == 3) {
$('div.container').children().css('width', '33.33%');
}
else if (contCount == 4) {
$('div.container').children().css('width', '25%');
}
}
$(document).ready(builder);
让我们深入。
首先,您有一个父类.container
。它有四个孩子。
在这种情况下,因为父代只有一个,所以您的代码绝对可以生成结果。问题是当它有多个父对象时提交。
现在您可以问我为什么?
好的,让我们解释一下。
$(document).ready(builder);
在这一行中,您将调用builder
函数。调用它时,首先执行var contCount = $('div.container').children().length;
行。
结果显然是4
。因为孩子的数量是4
。
假设您有两个.container
类。每个容器的孩子数不同。
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
</div>
在这种情况下,调用您的builder
函数时,contCount
的变量结果将为2。
困惑!
假设:
var foo = 4;
var foo = 2;
console.log(foo) // 2
这里发生了同样的事情。第一.container
类孩子的数目是4,第二.container
类孩子的数目是2。
因此contCount
将是2。这是主要问题。
我现在就调试它。但我想分享我对这个问题的解决方案。
HTML:
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
</div>
<div class="container">
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
<div class="col">test</div>
</div>
JS:
const builder = function(){
$('div.container').each(function(index,item){
const length = $(item).children('.col').length;
const gridNumber = 100/length;
if(length > 0) {
$(item).children().css('width', `${gridNumber}%`);
}
})
}
$(document).ready(builder);