2016-12-07 14 views
0

Ich habe eine Liste von Nachrichten und ich kann die Nachrichten ändern. Wenn ich einen verändere, bleibt sie in ihrer ursprünglichen Position (wenn sie auf Platz 5 war, bleibt sie hier). Aber wenn ich auf "Modify this new" klicke, erscheint ein Formular-Popup am Ende der Seite und wenn ich die Änderungen absende, möchte ich zu diesem modifizierten neuen Bild scrollen. Um dies zu tun würde ich so etwas wieSo testen Sie den Wert eines Labels

find position where label.text() == titleModified 

verwenden dann könnte ich

window.scrollTo(0,result of the line above); 

Im Moment habe ich versucht, document.getElementById zu tun, aber es bringt mich immer zum Seitenanfang ...

Danke mir
PS zu helfen: ein Link auf Plunker ist die Struktur von Nachrichten zu sehen: https://plnkr.co/edit/mLCxPYaBR56KkEOLNF8F?p=preview

und das ist mein JS für die Änderung:

'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) 

[...] 

EDIT (Ich werde hier die Lösung gebracht, doch der wahre Held ist @ alexr101): Zuerst hatte ich <label class="titreArticle">{{titre}}</label>
dann diese eine Klasse zu meinem Label hinzufügen ist die 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)` 

das Timeout hier ist, weil es nicht zu 100% Echtzeit und ich musste warten, bis der neue Titel in dem DOM gesetzt wurde.

Antwort

0

Versuchen Sie, die Y-Position des Elements wie so bekommen:

//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); 

würde das funktionieren?

+0

Ich denke, es ist auf dem richtigen Weg, aber ja, ich werde versuchen, ein bisschen besser zu erklären. Ich habe eine Menge Neuigkeiten und sie haben alle die gleiche Struktur https://plnrkr.co/edit/mLCxPYaBR56KkEOLNF8F?p=preview. Mit Ihrer Methode ist die yPosition immer 734 (das ist die letzte Nachricht). Ich denke, ich muss wirklich einen Weg finden zu testen, dass der Titel des modifizierten Artikels der gleiche wie der Label-Wert ist, um die richtige Position zu finden, die Sie sehen? Und wenn ich ein neues ändere, ändere ich seine Position nicht. Danke für die Hilfe @ alexr101 – Jerome

+0

Ja, ich sehe was du sagst. Können Sie den Text des neuen Titels aus der Datenbank oder von wo auch immer herkommen? Wenn Sie es sind, können Sie wahrscheinlich alle Nachrichtenelemente nach Klassen sortieren ... dann prüfen Sie, welche den Text enthält. Ich habe gestern etwas Ähnliches in einer Suchfrage verwendet. titleModifiedByClass.innerHTML.includes (textFromDatabase); – alexr101

+0

Ich denke, Sie müssten in Ihrer Frage genauer sein und mehr Code zeigen, damit wir Ihnen hier besser helfen können. So wie es jetzt ist, ist es etwas schwierig, weil die Frage ein wenig zu weit gefasst scheint. – alexr101

Verwandte Themen