我有一份新闻列表,我可以修改新闻。当我修改一个她留在她的初始位置(如果她在第5位,她留在这里)。但是当我点击"修改这个新的"一个表单弹出到页面底部,然后当我提交修改时,我想滚动到这个修改过的新。要做到这一点,我会使用像
这样的东西find position where label.text() == titleModified
然后我可以做
window.scrollTo(0,result of the line above);
目前我尝试document.getElementById
,但它总是把我带到页面顶部......
感谢您帮助我 PS:有关Plunker的链接,可以看到新闻的结构:https://plnkr.co/edit/mLCxPYaBR56KkEOLNF8F?p=preview
这是我修改的JS:
'submit .modifyArticle'(event) {
event.preventDefault();
const target = event.target;
const textModif = target.textModif.value;
const titreModif = target.titreModif.value;
const photoModif = target.photoModif.value;
const idModif = Session.get('idTemp');
//test if values from the from are not empty or whitespaced
if ((/\S/.test(textModif))||(/\S/.test(titreModif))) {
console.log("2ème étape: dans body.js -> submit .modifyArticle");
Meteor.call('articles.modify',idModif,textModif,titreModif,photoModif);
Session.set('wantModif',false);
//here my new is modified so I want to scroll to her
//var titreModified actually contains the title after the modification but only for the first new...
setTimeout(function(){
var titreModified = document.getElementById("titreArticle");
var position = titreModified.offsetTop;
console.log("Y: " + position);
console.log("var titreArticleModif: "+ titreModified.textContent);
}, 50)
[...]
编辑(我将解决方案放在这里,但真正的英雄是@ alexr101):首先我必须在我的标签<label class="titreArticle">{{titre}}</label>
上添加一个类
那么这就是JS:
`setTimeout(function(){
$('.titreArticle').each(function(i, obj) {
if(obj.textContent.includes(titreModif)){
alert("le titre devrait être: " + obj.textContent);
var position = obj.offsetTop;
window.scrollTo(0,position);
return false;
}
});
}, 20)`
超时在这里,因为它不是100%实时,我不得不等到新标题放入DOM。
答案 0 :(得分:0)
尝试获取元素的y位置:
//get modified element
var titleModified = document.getElementById("modifiedElement");
//get y position of element through offsetTop function
var yPosition = titleModified.offsetTop;
//Set scroll amount
window.scrollTo(0, yPosition );
那会有用吗?