Swansea recorded their first win in five Premier League games, as Fulham slipped closer to the relegation zone with just two victories in the last three months.
Danny Graham, playing in place of injured top scorer Michu up front, gave the visitors a first-half lead, before Jonathan de Guzman made it two.
Bryan Ruiz got one back after a scramble on the goal line.
But it was not enough, leaving Fulham with just one win in their last 12.
Swansea kept up their unbeaten record against Fulham in the Premier League, having done the double over them last season.
It also maintained their unique record of winning all six of the games in which they have opened the scoring this season.
For Swansea, this was proof there is life without talisman Spanish talisman Michu and Graham made the most of his return to the side with his goal.
But Fulham's goalkeeper David Stockdale had a game he would rather forget as two errors were pounced on by the Welsh side.
Striker Dimitar Berbatov had the first clear-cut chance to put the home side ahead but he scuffed his kick just inside the six-yard box from a corner and the ball flew over the crossbar.
Swansea then took the lead against the run of play when Stockdale made a meal of a relatively easy cross from winger Nathan Dyer, with Graham on hand to score his first Premier League goal since August.
Fulham nearly drew level moments later, midfielder Kerim Frei flashing his left-foot strike across goal when he really should have tested Swansea's German goalkeeper Gerhard Tremmel.
Tremmel was called into action again towards the end of the half when he parried a left-foot strike by Fulham's Ruiz around his right-hand post.
Ruiz had another chance to bring the hosts level just after the break as Tremmel could only watch the Costa Rican's free-kick fly past the post.
But Martin Jol's team soon found themselves 2-0 down after Stockdale's clearance hit defender Brede Hangeland and De Guzman pounced.
The home side finally scored when Ruiz found the back of the net after the ball broke to him from a Berbatov shot that came back off the bar, the goal going in off Sacha Riether, who Swansea protested was standing offside.
Berbatov thought he had levelled when he was first to a Ruiz shot parried by Tremmel but the Bulgarian striker was offside.