Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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,基于下面的代码,我想知道如何选择适合我在CSS中定义的宽度的最大文本 现在它显示所有文本,但只显示200px的文本,因为这是我定义的 将来我将有一个XML文件,其中有多个文本,我将通过AJAX调用读取该文件 $(“.places”)。每个(函数(索引,项){ var obj=$(项目).find(“span”); if(目标长度){ var placename=$(obj.text(); if($(obj).width()>$(item).width()&&placename.trim().l

基于下面的代码,我想知道如何选择适合我在CSS中定义的宽度的最大文本

现在它显示所有文本,但只显示200px的文本,因为这是我定义的

将来我将有一个XML文件,其中有多个文本,我将通过AJAX调用读取该文件

$(“.places”)。每个(函数(索引,项){
var obj=$(项目).find(“span”);
if(目标长度){
var placename=$(obj.text();
if($(obj).width()>$(item).width()&&placename.trim().length>0){
var限值=0;
做{
极限++;
placename=placename.substring(0,placename.length-1);
$(obj).文本(地名+“…”);
}while($(obj).width()>$(item).width()&&limit<1000)
}
}
});

作为建议,我不知道当CSS具有
文本溢出
属性时,为什么需要所有这些javascript行来实现相同的效果:

溢出{
空白:nowrap;
溢出:隐藏;
文本溢出:省略号;
最大宽度:200px;
}

像这样的长文本,而且都没有javascript!

如果我理解正确,您只需自动打断文字并在内容溢出的地方显示点即可。幸运的是,您可以通过使用css实现这一点,因此不必编写这种脚本

您应该这样使用它:

div.places {
  width : 200px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow: ellipsis;
}
var longestElement, longestWidth = 0;
$(".places span").each(function (index, span) {

    if ($(span).length) {
        var width = span.offsetWidth;
        if (width > longestWidth && width < 200) {
          longestElement = span;
          longestWidth = width;
        }
    }
    $(span).hide();
});

$(longestElement).show();

我认为您可以通过使用offsetWidth和一些jquery帮助来实现这一点,如:

div.places {
  width : 200px;
  white-space:nowrap;
  overflow:hidden;
  text-overflow: ellipsis;
}
var longestElement, longestWidth = 0;
$(".places span").each(function (index, span) {

    if ($(span).length) {
        var width = span.offsetWidth;
        if (width > longestWidth && width < 200) {
          longestElement = span;
          longestWidth = width;
        }
    }
    $(span).hide();
});

$(longestElement).show();
var longeselement,longestWidth=0;
$(“.places span”)。每个(函数(索引,span){
如果($(跨度).length){
var宽度=跨度偏移网络宽度;
如果(宽度>最长宽度和宽度<200){
长元素=跨度;
最长宽度=宽度;
}
}
$(span).hide();
});
$(longeselement.show();

我已经更新了

为什么不使用css
文本溢出:省略号
并保存所有js行,使其性能更好、更干净??我被你的问题和小提琴弄糊涂了。你到底想让它做什么,它还没有做?例如,我有一个300x250容器和多个文本。一行文字的宽度小于或大于300px。我想计算文本的宽度,然后只显示适合300px的文本。正如在我的JSFIDLE中一样,您可以看到第一个文本小于200px,但同时它正好适合第二个sext。第三个文本没有。在这种情况下,它应该只显示第二个文本。你试图实现的是危险的和非常奇怪的。文本将在浏览器和操作系统之间呈现不同。这意味着您需要为所需的每个操作系统的每个浏览器创建一个脚本。您将无法从浏览器之间适合200像素的文本中获得完美的宽度。也许你得到的是200.34555像素,这意味着这很合适,但你必须控制所有这些。如果你是我,我不喜欢也不想做这样的事情。阅读我上面的评论,你就会明白为什么我用JS来定义这个。也许你必须在帖子中用这种方式解释,而不是在评论中。然而我给你的评论是非常真实的。如果我理解正确,你只想显示长度最长的文本行,但也适合200像素的文本框宽度。是这样吗?因此,在JSFIDLE中,将显示的唯一一行文本是第二行,因为它是最长的一行文本,不会超出框的宽度。是吗?@StephanieKendall这是真的。这就是我想要的,现在我明白了,请看我的其他答案。