Match ends, Charlton Athletic 1, Swansea City 2.
Andre Ayew scored his first Swansea City league goal since May 2016 to send Steve Cooper's team top of the Championship.
The forward's 65th-minute strike sealed a comeback win for the Swans, after Charlton had gone ahead inside two minutes through Jonathan Leko, who drove home from 15 yards with the aid of a deflection.
Yan Dhanda levelled for Swansea with another deflected effort at the end of a bright passing move, before Ayew's close-range effort secured a sixth victory in 10 league games under Cooper.
Charlton could have few complaints as they failed to build on their impressive weekend win over Leeds United.
Lee Bowyer's side are formidable opponents on their own patch, where they were beaten for only the second time in the league in the last 12 months.
But Swansea travelled to London with belief having gone six away second-tier games without defeat and they duly extended that fine sequence.
The Welsh club's American owners, Jason Levien and Steve Kaplan, were also present for the first time this season to watch Cooper's side live.
But Swansea's confidence very quickly took a hit as Charlton scored from the first attack of the game.
After the visitors made hard work of clearing a cross from the right flank, Leko unleashed a fierce drive which flew into the top corner with the aid of a slight deflection.
The Valley was rocking but, to their credit, Swansea settled and found a way back into the contest on 17 minutes.
Ayew had lifted their first effort of the night over the bar, but the Ghanaian was involved again as Swansea worked the ball into the penalty area.
After Borja's lay-off, Jay Fulton squared for Dhanda to slide in only his second senior goal thanks to another deflection.
Swansea were growing in confidence and there was a scare for Charlton keeper Dillon Phillips as Fulton flashed a spectacular effort over the bar just before the break.
They threatened once more just after the restart as Fulton met Dhanda's cross with a point-blank volley which was saved by Phillips.
The ball then ricocheted off Fulton before the Scot hooked it across for Ayew to head home.
Swansea celebrations were cut short on this occasion as the assistant referee ruled that the ball had gone out for a goal-kick before Fulton centred.
Yet Ayew was not to be denied. When Matt Grimes swung in a corner from the left, Joe Rodon - who shone once more in central defence - rose to flick the ball on and Ayew stabbed home from close range.
Charlton threw men forward in the closing minutes, with one Jason Pearce header causing panic, but Swansea held on.
Charlton manager Lee Bowyer: "I thought it was a good, even game - two teams that try to play.
"In the first 20 minutes I thought we were the better side. We started really well and got the early goal.
"Then we got a bit sloppy in possession and gave them a lift. They got the equaliser from a deflection. We should have defended it better.
"Second half it was end to end at times and they got the goal from a set-piece, which is disappointing and frustrating because my players gave me 100%. I thought the draw would have been a fair result."
Swansea head coach Steve Cooper: "It's a good three points for sure. We gave ourselves a difficult start by going 1-0 down so early but to reply with a performance like that is pleasing.
"We had to show all sides of the game. We had plenty of possession play with the ball and we played some good stuff tonight.
"We scored a good first goal in terms of how we worked it into the area and then it's great to score from a set-piece.
"Late on there's an onslaught as happens in this league but I can't remember Freddie (Woodman) having to make a save. You want to defend the box and deal with whatever is coming at you and we did that."
- 5LockyerBooked at 83mins
- 6PearceBooked at 90mins
- 3PurringtonBooked at 50minsSubstituted forForster-Caskeyat 77'minutes
- 14LekoSubstituted forAnekeat 66'minutes
- 29OztumerSubstituted forWilliamsat 66'minutes
- 11GallagherBooked at 75mins
- 5van der Hoorn
- 22A Ayew
- 21DhandaSubstituted forCarrollat 78'minutes
- 10CelinaSubstituted forWilmotat 90+5'minutes
- 9BastónBooked at 90mins
- Peter Bankes
- Shots on Target
Second Half ends, Charlton Athletic 1, Swansea City 2.
Foul by Sam Field (Charlton Athletic).
Borja Bastón (Swansea City) wins a free kick in the defensive half.
Substitution, Swansea City. Ben Wilmot replaces Bersant Celina.
Attempt blocked. Macauley Bonne (Charlton Athletic) left footed shot from the centre of the box is blocked. Assisted by Conor Gallagher with a headed pass.
Jonathan Williams (Charlton Athletic) wins a free kick in the defensive half.
Foul by Jay Fulton (Swansea City).
Borja Bastón (Swansea City) is shown the yellow card.
Jason Pearce (Charlton Athletic) is shown the yellow card.
Attempt saved. Jason Pearce (Charlton Athletic) header from the centre of the box is saved in the centre of the goal. Assisted by Conor Gallagher with a cross.
Attempt blocked. Jason Pearce (Charlton Athletic) header from the centre of the box is blocked. Assisted by Josh Cullen with a cross.
Corner, Charlton Athletic. Conceded by Joe Rodon.
Attempt missed. Jay Fulton (Swansea City) header from the centre of the box is high and wide to the right. Assisted by Matt Grimes with a cross following a set piece situation.
Hand ball by Jonathan Williams (Charlton Athletic).
Offside, Charlton Athletic. Tom Lockyer tries a through ball, but Jason Pearce is caught offside.
Jonathan Williams (Charlton Athletic) wins a free kick in the attacking half.
Foul by Jay Fulton (Swansea City).
Jake Forster-Caskey (Charlton Athletic) wins a free kick in the defensive half.
Foul by Tom Carroll (Swansea City).