Jquery-如果父级有两个或多个子级,则创建ul,否则不创建ul
我正在尝试定制一个插件,该插件使用以下函数呈现Tumblr帖子的图像 到目前为止,我只在有两张或更多图片的情况下,将class.photoset添加到照片帖子的ul中Jquery-如果父级有两个或多个子级,则创建ul,否则不创建ul,jquery,tumblr,Jquery,Tumblr,我正在尝试定制一个插件,该插件使用以下函数呈现Tumblr帖子的图像 到目前为止,我只在有两张或更多图片的情况下,将class.photoset添加到照片帖子的ul中 function getImages(post) { // console.log(post) var html = []; html.push("<ul class='tumblr_post_images'>") $.each(post.photos, function
function getImages(post) {
// console.log(post)
var html = [];
html.push("<ul class='tumblr_post_images'>")
$.each(post.photos, function (i, photo) {
html.push('<li class="photo"><img src=' + photo.alt_sizes[0].url + '></li>')
})
$('.post_photo ul').has('li:nth-child(n+2)').addClass("photoset");
html.push("</ul>")
return html.join("");
};
函数getImages(post){
//控制台日志(post)
var html=[];
html.push(“- ”)
$.each(post.photos,函数(i,photo){
html.push(“”)
})
$('post_photo ul').has('li:n个孩子(n+2)).addClass(“photoset”);
html.push(“
//Function to retrieve all the images from the post. This builds an array which is then returned as html list of images.
function getImages(post) {
var html = [];
// Get the HTML
if (post.photos.length === 1) {
$.each(post.photos, function (i, photo) {
html.push('<img src=' + photo.alt_sizes[0].url + '>')
})}
else {
// More than one
html.push("<ul class='photoset'>")
$.each(post.photos, function (i, photo) {
html.push('<li class="photo"><img src=' + photo.alt_sizes[0].url + '></li>')
});
html.push("</ul>");
}
return html.join("");
}
//从帖子中检索所有图像的函数。这将构建一个数组,然后作为图像的html列表返回。
函数getImages(post){
var html=[];
//获取HTML
如果(post.photos.length==1){
$.each(post.photos,函数(i,photo){
html.push(“”)
})}
否则{
//不止一个
html.push(“”)
$.each(post.photos,函数(i,photo){
html.push(“”)
});
html.push(“
”);
}
返回html.join(“”);
}
更新2
T.J.克劳德斯最初的回答中有一个错误。他修好了,现在他的答案起作用了!
谢谢 尝试替换$('.post_photo ul').has('li:nth child(n+2)).addClass(“photoset”)代码>使用此代码:
if (post.length == 2) {
$('.post_photo ul').addClass("photoset")
}
尝试此$(id).children().length
获取子元素的计数
基本上,我想创建一个ul只有当有2个或更多的图片在照片张贴
然后只需检查post.photos.length
:
function getImages(post) {
var html = [];
// Get the HTML
if (post.photos.length) {
// We have at least one image
if (post.photos.length === 1) {
// Just one image
html.push('<img src=' + post.photos[0].alt_sizes[0].url + '>');
}
else {
// More than one
html.push("<ul class='tumblr_post_images'>")
$.each(post.photos, function (i, photo) {
html.push('<li class="photo"><img src=' + photo.alt_sizes[0].url + '></li>')
});
html.push("</ul>");
}
}
// Add or remove the class depending on whether we have more than one
$('.post_photo ul').toggleClass("photoset", post.photos.length > 1);
// Return the HTML (why are we returning it rather than putting it in the element here?)
return html.join("");
}
函数getImages(post){
var html=[];
//获取HTML
if(post.photos.length){
//我们至少有一个图像
如果(post.photos.length==1){
//只有一张照片
html.push(“”);
}
否则{
//不止一个
html.push(“”)
$.each(post.photos,函数(i,photo){
html.push(“”)
});
html.push(“
”);
}
}
//根据是否有多个类添加或删除该类
$('.post_photo ul').toggleClass(“photoset”,post.photos.length>1);
//返回HTML(为什么我们要返回它而不是将它放在这里的元素中?)
返回html.join(“”);
}
还要注意的是,我已经添加了缺少的分号(强烈建议不要依赖自动插入分号的恐惧),并删除了不必要的分号(函数声明是声明,而不是表达式;它们的末尾没有
;
)。+1编辑,Barmar.Alexandros,很难说你到底想做什么。你能详细解释一下吗?在你的页面中是否有不止一个地方你可以这样做?因为它对解决方案很重要。- 内容
不会对标记造成太大的污染,即使如此,它也有O(1)(常量)污染度,而与项目数无关。你有没有试过.childrence().length
?@T.J.Crowder基本上我只想在一张照片中有两张或更多的图片时创建一个ul。这是我的页面中唯一可以这样做的地方。@Alexandros:重新编辑:使用$没有任何意义。当你知道post.photos
只有一个条目时,每个(post.photos
)都没有意义。这就是为什么我在回答中没有这样做的原因。(不过,我只是注意到并修复了我回答中的一个bug。)我将你的回答标记为这个问题的答案,因为Stackoverflow不允许我发布我自己问题的答案,而你真的帮助我找到了解决方案。不过,请查看我问题的更新和有效代码。干杯!@Alexandros:“…因为Stackoverflow不允许我发布我自己问题的答案…”。你可以回答自己的问题。你不能在两天内接受答案,但可以在两天之后接受。不过,在这种情况下,我认为接受我的答案是合适的;你在问题上发布的内容与上述内容基本相同。