Leeds climbed out of the Premier League relegation zone after holding off a late Wolves fightback to win an enthralling game at Molineux.
The victory lifts Javi Gracia's side - who started the day in 19th - four places and two points above the bottom three.
Jack Harrison, who scored in last weekend's 2-2 draw at home to Brighton, side-footed Wilfried Gnonto's cut-back past Jose Sa to give the visitors an early lead after a bright start.
Leeds doubled their advantage four minutes into the second half as Luke Ayling, left completely unmarked by the Wolves defence, beat Sa with a low header from point-blank range.
More questionable defending from Jonny gifted second-half substitute Rasmus Kristensen a third moments after the Dane's introduction, before the Wolves defender gave his team hope with a tremendous volleyed finish after Illan Meslier had come rushing out of his goal to make a clearance.
Matheus Cunha's deflected strike set up a nail-biting finale, but Wolves' hopes of a dramatic comeback were dealt a blow when Jonny was shown a straight red card for a reckless, studs-up challenge on Ayling with just over six minutes remaining.
Rodrigo completed the scoring deep into added time, lifting the ball over the onrushing Sa for his 11th league goal of the campaign.
"I enjoyed [the game] more in the first half," Gracia told BBC Match of the Day afterwards. "In the second half we suffered a lot.
"We knew before coming here it would be a very demanding game. After scoring three goals we maybe thought the game was over.
"My players deserve their reward. To win here, they did many things well."
Julen Lopetegui's Wolves side stay 13th but remain only three points above the relegation zone, having played at least a game more than the majority of their rivals near the foot of the table.
Rare away success breathes life into Leeds survival bid
Leeds have shown plenty of promise in their two home games under new manager Gracia but had lost both games away from Elland Road under the 52-year-old - at Fulham in the FA Cup and Chelsea in the league - prior to Saturday.
The visitors certainly didn't start like a team with only one top-flight victory on their travels this season, taking the game to Wolves and going in front with just six minutes on the clock.
Gnonto, restored to the side in place of Crysencio Summerville, was particularly lively early on and vindicated his manager's decision with a brilliant cut-back into Harrison, who side-footed home his second goal in as many games.
The visitors had their backs to the wall for the rest of the first half as Wolves applied heavy pressure, but a combination of smart goalkeeping, last-ditch defending and wasteful finishing ensured they went into half-time with their narrow lead intact.
Second-half goals from Ayling - his first since scoring in Leeds' 3-2 win at Molineux on 18 March last year - and Kristensen gave Leeds a seemingly comfortable platform for a rare away success, but Jonny's spectacular finish and Cunha's low effort - which took a heavy deflection off Maximilian Wober on its way in - offered Wolves an unlikely lifeline.
Ayling was fortunate to escape serious injury when Jonny caught the Leeds skipper with a high challenge after a heavy touch, but the 31-year-old was back on his feet quickly to help the visitors see out the victory.
Rodrigo's late effort was subject to a VAR review for an apparent foul by Marc Roca on Adama Traore in the build-up, but after viewing the incident on his pitchside monitor referee Michael Salisbury decided to award the goal.
Wolves frustrated on eventful afternoon for Jonny
Wolves were adamant they should have been awarded a penalty at St James' Park last weekend, and they were no less incensed by Salisbury's failure to award a spot-kick after Junior Firpo appeared to clip Nelson Semedo in the area minutes after Harrison's opener.
Lopetegui looked on bemused as the video assistant referee confirmed Salisbury's original decision, before making his feelings plain to fourth official Andre Marriner.
However, the hosts could have no complaints with the decision to dismiss Jonny, who had an eventful afternoon to say the least.
The 29-year-old should have cleared a low cross in the build-up to Leeds' third but failed to adequately shield the ball under pressure from Kristensen, who found the far corner with a drilled finish.
Jonny then got Wolves on the scoresheet with a magnificent 35-yard volley after Roca had headed Meslier's clearance into his path.
But the defender's afternoon ended on a sour note after his dismissal for the challenge on Ayling. There was no intent from the Spaniard, but Salisbury wasted little time in brandishing the red card after being told to review the tackle on his monitor.
Unused substitute Matheus Nunes was also shown a red card deep into second-half stoppage time after remonstrating with the officials in the aftermath of Rodrigo's late goal.
After conceding four for the first time since October, Wolves' meeting with Nottingham Forest after the international break now takes on added importance.
Player of the match
Squad number37Player nameTraoréAverage rating
Squad number8Player nameRúben NevesAverage rating
Squad number1Player nameJosé SáAverage rating
Squad number22Player nameNélson SemedoAverage rating
Squad number23Player nameKilmanAverage rating
Squad number15Player nameDawsonAverage rating
Squad number9Player nameJiménezAverage rating
Squad number7Player namePedro NetoAverage rating
Squad number10Player nameDaniel PodenceAverage rating
Squad number12Player nameMatheus CunhaAverage rating
Squad number5Player nameLeminaAverage rating
Squad number35Player nameJoão GomesAverage rating
Squad number28Player nameJoão MoutinhoAverage rating
Squad number21Player nameSarabiaAverage rating
Squad number4Player nameCollinsAverage rating
Squad number19Player nameJonnyAverage rating
Squad number11Player nameHarrisonAverage rating
Squad number39Player nameWöberAverage rating
Squad number29Player nameGnontoAverage rating
Squad number25Player nameKristensenAverage rating
Squad number19Player nameRodrigoAverage rating
Squad number2Player nameAylingAverage rating
Squad number5Player nameKochAverage rating
Squad number1Player nameMeslierAverage rating
Squad number21Player nameStruijkAverage rating
Squad number10Player nameSummervilleAverage rating
Squad number8Player nameRocaAverage rating
Squad number28Player nameMcKennieAverage rating
Squad number3Player nameFirpoAverage rating
Squad number9Player nameBamfordAverage rating
Squad number7Player nameAaronsonAverage rating