- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的客户强制我使用他在他以前的网站上使用的一些脚本来缓慢而平稳地加载文章的文本。脚本有效,但问题是格式 ( <strong>
) 在某处丢失了,而不是三个不同的段落,我把它们放在一起三次...
HTML
<article id="post-5" class="post-5 page type-page status-publish hentry" style="overflow: hidden; width: auto; height: 400px;">
<div class="col-6 column">
<p><strong>Je mi přes 40 a jsem žena.</strong></p>
<p><strong>Snažila jsem se zařadit, zmoudřet a mít klid. Nepodařilo se.</strong></p>
<p style="text-align: justify;">Teď se už předělávat nehodlám. A víte co? Strašně si to užívám. Prozkoumávám svou zběsilost v srdci, ženskou marnivost i potřebu mít věci pod kontrolou. Zjistila jsem, že svět je báječné místo k žití, že život není vždycky fér, ale c´est la vie, že být sexy neznamená být krásná, že být úspěšná, neznamená být chytrá, že když se člověk nebere smrtelně vážně, tak je to vlastně skvělá jízda a že můj “bucketlist” je zatraceně dlouhý. Také, že když se nám “povedou” děti, věříme na geny, ale když jsou děti svérázné a my čelíme neustále zvednutému obočí okolí a máme pocit selhání – je lepší nechat to být a doufat, že se dobré geny nakonec “proberou”, protože to jediné, na čem opravdu záleží, jsou hodnoty a důvěra v sebe i svět okolo nás, neopomíjet tu krásu a čistotu, která dětství provází, tu lásku, kterou jsme schopni získat i dávat a užít si čas, který nám byl dán. Svět je plný silných příběhů a skvělých lidí a já jsem se rozhodla, že v čase, který mi byl vyměřen, je chci potkávat, chci se jimi inspirovat a tuto inspiraci předávat dál.</p>
</div>
</article>
Javascript
var header = $('.post-5 div p');
var title = header.text();
header.text('');
var arrayTitle = title.split('');
var i = 0;
var interval = setInterval(function(){
if (i > arrayTitle.length) {
setTimeout(function(title) {
header.text(title);
}, 1000, title);
//header.text(title);
clearInterval(interval);
} else {
$('<span>')
.text(arrayTitle[i])
.appendTo(header)
.hide()
.fadeIn(1000);
i++;
}
}, 30);
这里是Codepen你可以看到它对文本做了什么。非常感谢您的帮助。
最佳答案
(...) the problem is that the formatting (
<strong>
) is lost somewhere (...)
.text()
方法返回元素(及其后代)的纯文本,不带标签。
要获取包含标签的文本,jQuery 有一个 .html()
方法。但是,这也不适用于您的代码(除非使用 regular expressions )。这是因为您将文本分解为单个字符:
var arrayTitle = title.split('');
然后所有的字符都被包裹成<span>
:
$('<span>')
.text(arrayTitle[i])
//...
所以,即使使用 .html()
标签没有被删除的地方,标签的每个字符将被包装成<span>
元素,这样它的结果如下(<strong>
):
<span><</span>
<span>s</span>
<span>t</span>
<span>r</span>
<span>o</span>
<span>n</span>
<span>g</span>
<span>></span>
...
(...) instead of three different paragraphs I've got all together three times
这是这些行的结果:
var header = $('.post-5 div p');
var title = header.text();
那里实际发生的是 header
指向包含所有 <p>
的对象元素。title
是从该对象内的所有元素中提取的文本。
因此里面的每一项 header
(每个 <p>
) 被所有三个 <p>
的文本填充元素。
您需要遍历 <p>
元素分别处理它们中的每一个:
$('.post-5 div p').each(function(){
// $(this) points to the current <p> element instead of all:
var header = $(this);
// ...
});
如果代码应该仅与严格指定的 HTML 标记一起工作,这可以让您更接近。
然后你可以使用 if
检查某些条件并运行原始代码的语句:
// declare current timeout variable:
var delay = 0;
$('.post-5 div p').each(function(){
// declare <strong> element as current 'header':
var header = $(this).find('strong');
// if it's not found:
if(!header.length){
// declare <p> instead as current 'header':
header = $(this);
}
// ... your code ...
// Then wrap your setInterval with a setTimeout to not fade each <p> at once:
setTimeout(function(){
var interval = setInterval(function(){
// ... your code ...
}, 30);
// set timeout on which the current 'header' should start fading:
},delay);
// update delay for the next <p> element:
delay += 30*arrayTitle.length;
});
这是对您的代码的快速修复,考虑到它可以与静态 HTML 标记一起使用。
Additional way (清洁工)
为了使代码能够处理具有多个嵌套标签的内容,首先您应该将文本和元素分开以使您的标签完好无损。
可以使用 .contents()
来完成(jQuery) 和 nodeType
(JavaScript)
.contents()
返回子元素数组,对于该 HTML 示例:
Hello <b>World</b> <span>Foo Bar</span>
结果将是:
nodeType:3 | nodeType:1 | nodeType:3 | nodeType:1
[Hello ] | [World] | [ ] | [Foo Bar]
然后您可以遍历该数组并将字符包装到 <span>
中仅当nodeType === 3
,否则再次为该节点运行函数:
function spanifyText(el){
$(el).contents().each(function(){
// check if the element is not a text node:
if(this.nodeType !== 3){
// not a text node, run method again for that element:
return spanifyText(this);
}
// it's a text node. Process it:
$(this).replaceWith('<span class="fade">'+$(this).text().split('').join('</span><span class="fade">')+'</span>');
});
}
spanifyText('.post-5 div p');
// after processing, hide each character and fade it:
$('.fade').hide().each(function(i){
$(this).delay(i*30).fadeIn(function(){
// unwrap the character after animation, so that it is no longer inside a <span>:
$(this).contents().unwrap();
});
});
关于javascript - 如何在不丢失格式的情况下连续 fadeIn() 元素文本的每个字符,包括嵌套元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29034662/
如何检查一个元素是否立即隐藏。即如何通知元素的可见性。 在我的例子中,该元素是通过 slideUp 函数隐藏的。我应该立即收到有关该元素的可见性的通知。 我想到了使用bind()方法。但它没有类似 o
if (srcbloc == NULL) { fprintf(stderr, "warning!: memrip source is null!\n"); exit(1); } if
当我在数据库的旧 View 中清理一些问题时,我遇到了这个“奇怪”的连接条件: from tblEmails [e] join tblPersonEmails [pe]
如何水平对齐多张图像,一张一张地?它们不必适合宽度屏幕:相反,我希望它们超过后者的宽度,如果这有任何意义的话。 我已经检查了很多类似问题的答案,但找不到任何可以解决我的问题的答案。 HTML:
我知道 Cassandra 中的列有 TTL。但是也可以在一行上设置 TTL 吗?在每列上设置 TTL 并不能解决我的问题,如下面的用例所示: 在某些时候,一个进程想要删除一个带有 TTL 的完整行(
我有一个 NSTextField 和 Label,其值绑定(bind)到 View Controller 中的相同 NSString 这里的问题是标签只有在我按 Tab 时才会更新。 如何使其连续,以
例如。 1."abc"; ===>abc 2."ab c"; ===>ab_c 3."ab c"; ===>ab_c 4."ab c" ===>ab_c 对于多个连续空格也是如此。 我怎样
大家好,我想获取前一天或最后一天的信息,只有当我按下按钮时,它才会显示最后一天(星期六)的所有信息,如果我再次单击按钮,它将显示最后一天的信息(星期五)如果我再次点击它(星期四)谢谢你们帮助我 编辑:
我需要从实时音频流中提取ICY元数据,并正在使用mplayer进行此操作,因为它在播放音频流时会输出元数据。我欢迎其他方式执行此操作,目标是将更新的元数据(歌曲信息)保存到文本文件中,只要歌曲(或数据
语音识别有没有解决方案 只有几个字(2 个就够了,10 个就不错了。100 个就很棒了。不需要更多) 也在移动浏览器上运行(是否可以为此使用 flash(而不是 java)?) 可以安装在您自己的服务
我有一个单词列表, list1 = ['hello', 'how', 'are', 'you?', 'i', 'am', 'fine', 'thanks.', 'great!'] 我想加入, list
我正在开发一个程序,但我不断收到“对‘dosell’的 undefined reference ”,我不太明白发生了什么。这是函数的声明: void dosell(int *cash, int *nu
我无法提出执行我要做的事情所需的查询。 我有三个这样的表: client_files ----------------------- client_id file_id ---------
我一直在寻找一个插件/脚本,当到达底部时,它会从头开始继续滚动网站,就像一个连续的循环。 示例:http://unfold.no/和 http://www.aquiesdonde.com.ar/ 我尝
这个问题在这里已经有了答案: How to prevent scanf causing a buffer overflow in C? (6 个答案) 关闭 6 年前。 我一直在使用一个非常简单的程
给定一个整数数组,找到具有相同数量的 x 和 y 的连续子序列的总数。例如 x=1 和 y=2 的数组 [1,2,1] ans = 2 表示它的两个子数组 [1,2] 和 [2,1]。检查每个连续的子
所以,我有一个所有正自然数的数组。我得到了一个阈值。我必须找出总和小于给定阈值的数字(连续)的最大计数。 For example, IP: arr = {3,1,2,1} Threshold = 5
我制作了像内置相机一样的相机应用。 我想实现像内置相机一样的连续对焦功能。(此功能我不触摸屏幕,但相机会尝试自行对焦。) 因此,将其设置为 surfaceCreated : Camera.Pa
我有这样的数据: f x A 1.1 A 2.2 A 3.3 B 3.5 B 3.7 B 3.9 B 4.1 B 4.5 A 5.1 A 5.2 C 5.4 C 5.5 C 6.1 B 6.2 B
假设我有一个包含一组数据点的表,每个数据点由一个时间戳和一个值组成。如果至少有 N 个连续记录(按时间戳排序)高于给定值 X,我将如何编写返回 true (1) 的查询,否则返回 false (0)?
我是一名优秀的程序员,十分优秀!