Jquery-如果父级有两个或多个子级,则创建ul,否则不创建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

我正在尝试定制一个插件,该插件使用以下函数呈现Tumblr帖子的图像

到目前为止,我只在有两张或更多图片的情况下,将class.photoset添加到照片帖子的ul中

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(“
”) 返回html.join(“”); }; 理想情况下,我希望它只在一篇文章中有两个以上的图像时才呈现ul,这样标记就干净了。我尝试过一些条件语句,但我就是不能让它工作。任何帮助都将不胜感激

更新 多亏了T.J.克劳德斯的回答,我终于找到了解决问题的办法。以下是有效的代码:

    //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不允许我发布我自己问题的答案…”。你可以回答自己的问题。你不能在两天内接受答案,但可以在两天之后接受。不过,在这种情况下,我认为接受我的答案是合适的;你在问题上发布的内容与上述内容基本相同。